如何在 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 中将数字格式化为美元金额的主要内容,如果未能解决你的问题,请参考以下文章

在碧玉报告中将字符串格式化为货币格式

如何在 Dart 中将数字格式化为千位分隔符

在php中将日期格式更改为数字[重复]

如何将一长串数字转换为格式化的小时数

如何使用 BI Publisher Desktop 在 RTF 模板中将数字格式化为字母?

如何在java中将十进制数字格式化为两个小数点? [复制]