我的页面中会显示一些价格值。
我正在编写一个函数,它接受浮动价格并返回带有货币代码的格式化货币val。
例如,fnPrice(1001.01)
应打印$ 1,000.01
答案 0 :(得分:107)
最简单的答案是number_format()
。
echo "$ ".number_format($value, 2);
如果您希望您的应用程序能够使用多种货币和区域设置感知格式(例如,对于我们这些欧洲人来说,1.000,00
),它会变得有点复杂。
有money_format()
但它在Windows上不起作用并且依赖于setlocale()
,这在我看来是垃圾,因为它需要在服务器端安装(任意命名的)语言环境包。
如果您想认真地将您的应用程序国际化,请考虑使用像Zend Framework Zend_Locale和Zend_Currency这样的全面国际化库。
答案 1 :(得分:50)
使用PHP 5.3+中的intl扩展名,您可以使用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 :(得分:7)
sprintf()是用于各种字符串格式化的PHP函数 http://php.net/manual/en/function.sprintf.php
我使用这个功能:
function formatDollars($dollars){
return '$ '.sprintf('%0.2f', $dollars);
}
答案 3 :(得分:4)
我构建了这个小功能,可以自动将任何内容格式化为漂亮的货币格式。
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}";
}
答案 4 :(得分:1)
PHP有一个名为money_format
的函数来执行此操作。阅读here。
答案 5 :(得分:0)
<?php
$number = 1234.56;
// english notation (default)
$english_format_number = number_format($number);
// 1,235
// French notation
$nombre_format_francais = number_format($number, 2, ',', ' ');
// 1 234,56
$number = 1234.5678;
// english notation without thousands separator
$english_format_number = number_format($number, 2, '.', '');
// 1234.57
?>
答案 6 :(得分:0)
尝试
echo "$".money_format('%i',$price);
输出将为
$ 1.06