我的页面中显示了一些价格值。
我正在编写一个函数,它接受浮动价格并返回带有货币代码的格式化货币val。
例如,fnPrice(1001.01)
应该打印$ 1,000.01
最简单的答案是number_format()
。
echo "$ ".number_format($value, 2);
如果您希望您的应用程序能够使用多种货币和区域设置感知格式(例如,对于我们这些欧洲人来说,1.000,00
),它会变得有点复杂。
有money_format()
但它在Windows上不起作用并且依赖于setlocale()
,这在我看来是垃圾,因为它需要在服务器端安装(任意命名的)语言环境包。
如果您想认真地将您的应用程序国际化,请考虑使用像Zend Framework的Zend_Locale和Zend_Currency这样的全面国际化库。
使用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 €
sprintf()是各种字符串格式化http://php.net/manual/en/function.sprintf.php的PHP函数
我用这个函数:
function formatDollars($dollars){
return '$ '.sprintf('%0.2f', $dollars);
}
我构建了这个小函数来自动将任何东西格式化成一种不错的货币格式
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}";
}
为了做到这一点,PHP有一个名为money_format
的函数。了解这个here。
<?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
?>