2010-10-25 88 views
32

我有一些價格值可以顯示在我的頁面中。用PHP打印貨幣數字格式

我寫一個函數,它接受的價格浮動,並返回貨幣代碼太格式的貨幣VAL ..

例如,fnPrice(1001.01)應打印$ 1,000.01

回答

95

最簡單的答案是number_format()

echo "$ ".number_format($value, 2); 

如果你希望你的應用程序能夠與多種貨幣和區域設置的格式(1.000,00我們一些歐洲人例如)工作,它變得更加複雜一點。

money_format(),但它不適用於Windows並依賴於setlocale(),這在我看來是垃圾,因爲它需要在服務器端安裝(任意命名的)區域設置包。

如果您想嚴格國際化您的應用程序,請考慮使用像Zend Framework的Zend_LocaleZend_Currency這樣的全面國際化庫。

+5

+1不知道有關Windows的這些問題。 – Sarfraz 2010-10-25 11:12:56

+3

不錯的答案,Zend_Locale和Zend_Currency的+1 – RobertPitt 2010-10-25 11:15:14

+0

優秀的答案 – MikeMurko 2013-02-11 17:56:30

7

的sprintf()是用於各種字符串格式化 http://php.net/manual/en/function.sprintf.php

我用這個函數的PHP函數:

function formatDollars($dollars){ 
    return '$ '.sprintf('%0.2f', $dollars); 
} 
+3

這不會添加逗號(數千個分隔符) – stillstanding 2010-10-25 11:38:45

+1

原諒gravedig。你可以把'$ dollars'(在'sprintf()')中換成'number_format()'。這將爲本機號碼格式添加逗號 – Magictallguy 2014-01-03 05:33:27

44

與PHP 5.3+的國際擴展,可以使用NumberFormatter類:

$amount = '12345.67'; 

$formatter = new NumberFormatter('en_GB', NumberFormatter::CURRENCY); 
echo 'UK: ', $formatter->formatCurrency($amount, 'EUR'), PHP_EOL; 

$formatter = new NumberFormatter('de_DE', NumberFormatter::CURRENCY); 
echo 'DE: ', $formatter->formatCurrency($amount, 'EUR'), PHP_EOL; 

它打印:

UK: €12,345.67 
DE: 12.345,67 € 
+2

+1 – KoolKabin 2013-09-06 12:02:13

+2

對於不需要先轉換爲浮點的解決方案非常重要。使用浮動貨幣非常危險。 – 2016-05-20 15:38:39

1

我構建了這個小函數來自動將任何格式的任何格式格式化爲不錯的貨幣格式。

function formatDollars($dollars) 
{ 
    return "$".number_format(sprintf('%0.2f', preg_replace("/[^0-9.]/", "", $dollars)),2); 
} 

編輯

有人指出,這並不表明負值。我把它分成兩行,所以編輯格式更容易。把它包在括號如果它是一個負值:

function formatDollars($dollars) 
{ 
    $formatted = "$" . number_format(sprintf('%0.2f', preg_replace("/[^0-9.]/", "", $dollars)), 2); 
    return $dollars < 0 ? "({$formatted})" : "{$formatted}"; 
} 
+0

+1的花式功能! – 2014-09-27 20:51:41

+1

這個doens't保留負值 – FlyingNimbus 2016-05-18 13:42:18

+0

這是真的。我已更新該函數以包含負數支持。謝謝@FlyingNimbus – DAWTSF 2016-06-24 15:52:57

1

PHP有一個這樣做的叫money_format功能。閱讀關於這個here