如何在PHP中将数字格式化为美元金额

73

如何将一个数字转换为显示美元和分的字符串?

eg:
123.45    => '$123.45'
123.456   => '$123.46'
123       => '$123.00'
.13       => '$0.13'
.1        => '$0.10'
0         => '$0.00'

你有特定的编程语言想法吗? - Bill the Lizard
我想应该要更加明确 - 我现在会进行更改。 - nickf
在将浮点数格式化为特定数字时,要小心隐式舍入。如果有两个值为$0.015的项目,则可能出现2 + 2 = 3的情况。此外,请注意,浮点数不能准确地保存像0.1这样的简单值。 - Eugene Yokota
3
你应该使用整数并将金额存储为分,而不是使用浮点数,否则在过程中会丢失一些分钱。 - too much php
7个回答

88

如果您只想要一些简单的东西:

'$' . number_format($money, 2);

number_format()


3
请注意,这将在每三个数字分组后添加一个逗号(或类似于您所在地区的符号)。这可能是需要的,但如果您没有预期到它,可能会非常令人困惑。 - nickf
11
不带千位分隔符的写法是:'$' . number_format($money, 2, '.', ''); - Justin Anderson
2
这不适用于负数,我们使用 -$69.42 而不是 $-69.42。 - Cano64

87

PHP同样也有money_format()函数。

以下是一个示例:

echo money_format('$%i', 3.4); // echos '$3.40'

这个函数实际上有很多选项,请查看我链接的文档以了解它们。

注意:在Windows中未定义money_format。


更新:根据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');

12
注:函数 money_format() 只有在系统具备 strfmon 功能时才被定义。例如,Windows 没有这个功能,因此在 Windows 中未定义 money_format()。 - too much php
1
我理论上最喜欢这种方法,但为什么我的输出是 $USD 3.40。你知道我可以更改哪些参数以获得上面的输出(不带“USD”)吗?显然,我更喜欢不使用 str_replace 或 regexes 来完成这个任务。 - MCybertron
3
在这里找到了答案:链接。只需要执行 money_format('%.2n', 3.4); 即可。 - MCybertron
2
这个函数现在已经被弃用了吗?当我使用它时,它现在是“未定义的”。 - 5120bee
但是 money_format('$%i', 3.4) 并不像大多数人希望的那样处理负数。 - Ryan
money_format() 函数已被弃用,可以使用intl NumberFormatter功能进行替换。参考:https://www.php.net/manual/en/migration74.deprecated.php - Radmation

17

我尝试了money_format(),但它对我根本不起作用。然后我尝试了下面这个代码,它对我非常有效。希望对你也能有所帮助... :)

你应该使用这个代码

number_format($money, 2,'.', ',')

它将按照货币格式显示金钱数量,保留两位小数。


9
请注意,在PHP 7.4中,money_format() 函数已被弃用。它可以由intl NumberFormatter功能替代,只需确保启用了php-intl扩展即可。虽然需要付出一点点努力,但是你可以获得更多的自定义功能。
$f = new NumberFormatter("en", NumberFormatter::CURRENCY);
$f->formatCurrency(12345, "USD"); // Outputs "$12,345.00"

对于7.4版本依然有效的快速方法如Darryl Hein所述:

'$' . number_format($money, 2);

2
我的PHP缺少“Intl”扩展,所以这让我走上了正确的轨道! - oelna

8
在PHP和C++中,您可以使用printf()函数。
printf("$%01.2f", $money);

内置的PHP函数非常方便。 - Darryl Hein

2
在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);

0
/*     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)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接