如何在 PHP 中将数字格式化为美元金额
Posted
技术标签:
【中文标题】如何在 PHP 中将数字格式化为美元金额【英文标题】:How do I format a number to a dollar amount in PHP 【发布时间】:2010-09-22 15:10:19 【问题描述】:如何将数字转换为显示美元和美分的字符串?
eg:
123.45 => '$123.45'
123.456 => '$123.46'
123 => '$123.00'
.13 => '$0.13'
.1 => '$0.10'
0 => '$0.00'
【问题讨论】:
你有什么特定的编程语言吗? 我想它应该是具体的 - 我现在会改变它。 小心将浮点格式化为某个数字所引入的隐式舍入。如果有两个 $0.015 的项目,您可能会遇到 2 + 2 = 3 的情况。还要注意,浮点数不能准确地保存像 0.1 这样的简单值。 你应该使用整数并存储美分的数量,而不是使用浮点数,否则你会一路损失一些美分。 【参考方案1】:在 php 和 C++ 中,您可以使用 printf() 函数
printf("$%01.2f", $money);
【讨论】:
内置的PHP函数真的很方便。【参考方案2】:PHP 还有money_format()。
这是一个例子:
echo money_format('$%i', 3.4); // echos '$3.40'
这个函数实际上有很多选项,请转到我链接到的文档来查看它们。
注意:money_format 在 Windows 中未定义。
更新:通过 PHP 手册:https://www.php.net/manual/en/function.money-format.php
警告:此函数 [money_format] 自 PHP 7.4.0 起已弃用。强烈建议不要依赖此函数。
相反,请查看NumberFormatter::formatCurrency。
$number = "123.45";
$formatter = new NumberFormatter('en_US', NumberFormatter::CURRENCY);
return $formatter->formatCurrency($number, 'USD');
【讨论】:
来自文档:注意:函数 money_format() 仅在系统具有 strfmon 功能时才定义。例如,Windows 没有,因此 money_format() 在 Windows 中是未定义的。 理论上我最喜欢这种方法,但为什么我的输出是 $USD 3.40。你知道我可以改变什么参数来获得上面的输出(没有“美元”)吗?显然,我更愿意在没有 str_replace 或正则表达式的情况下这样做。 找到答案here。只需执行 money_format('%.2n', 3.4); 这个功能现在被弃用了吗?当我使用它时,它现在是“未定义的”。 但是money_format('$%i', 3.4)
并没有像大多数人喜欢的那样处理底片。【参考方案3】:
如果你只是想要一些简单的东西:
'$' . number_format($money, 2);
number_format()
【讨论】:
请注意,这将在每个三位数分组后添加一个逗号(或您的区域设置中的等效项)。这可能是需要的,但如果您没有预料到,可能会非常混乱。 不使用千位分隔符:'$' . number_format($money, 2, '.', '');
这不适用于负数,我们使用 -$69.42 而不是 $-69.42【参考方案4】:
我尝试了money_format()
,但它根本不适合我。然后我尝试了以下一个。它对我来说很完美。希望它也能以正确的方式为您工作.. :)
你应该用这个
number_format($money, 2,'.', ',')
它将以货币格式显示货币编号,最多 2 位小数。
【讨论】:
【参考方案5】:在 php.ini 中添加(如果缺少):
#windows
extension=php_intl.dll
#linux
extension=php_intl.so
然后这样做:
$amount = 123.456;
// for Canadian Dollars
$currency = 'CAD';
// for Canadian English
$locale = 'en_CA';
$fmt = new \NumberFormatter( $locale, \NumberFormatter::CURRENCY );
echo $fmt->formatCurrency($amount, $currency);
【讨论】:
【参考方案6】:/* Just Do the following, */
echo money_format("%(#10n","123.45"); //Output $ 123.45
/* If Negative Number -123.45 */
echo money_format("%(#10n","-123.45"); //Output ($ 123.45)
【讨论】:
【参考方案7】:请注意,在 PHP 7.4 中,money_format() 函数是deprecated。它可以被 intl NumberFormatter 功能替换,只需确保启用 php-intl 扩展。这是一个很小的努力,而且值得,因为您可以获得很多可定制性。
$f = new NumberFormatter("en", NumberFormatter::CURRENCY);
$f->formatCurrency(12345, "USD"); // Outputs "$12,345.00"
Darryl Hein 提到的仍然适用于 7.4 的快速方法:
'$' . number_format($money, 2);
【讨论】:
我的 PHP 缺少Intl
扩展,所以这让我走上了正轨!以上是关于如何在 PHP 中将数字格式化为美元金额的主要内容,如果未能解决你的问题,请参考以下文章