2010-10-25 86 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