【问题标题】:Why does NumberFormatter drop monetary fraction digits in format()为什么 NumberFormatter 在 format() 中删除货币小数位数
【发布时间】:2017-11-17 17:41:30
【问题描述】:

为什么下面两行

$fmt = new NumberFormatter('en_US', NumberFormatter::CURRENCY);
echo $fmt->format(12.34, NumberFormatter::CURRENCY);

输出$12.00 ?

【问题讨论】:

  • 我知道$fmt->formatCurrency() 不会删除数字,但我想使用format(),因为它允许通过$fmt->setSymbol() 覆盖货币符号。
  • 看在上帝的份上,不要将钱存储为浮点数,请使用像 moneyphp/money 这样的适当库,由于浮点数不准确,它不会直接损失钱.
  • @Sammitch 我知道,但是我必须将它们转换为 float 才能使用 NumberFormatter。

标签: php currency numberformatter


【解决方案1】:

这是因为您使用 NumberFormatter::CURRENCY 常量作为 format() 的第二个参数。

NumberFormatter 文档的predefined constants 部分中,常量按应与它们一起使用的方法分组。

NumberFormatter::CURRENCY 的值为2,应该在构造格式化程序时使用,正如您所做的那样。 format()函数中的2值对应NumberFormatter::TYPE_INT64

您应该能够在没有第二个参数的情况下调用format(12.34)

$fmt = new NumberFormatter('en_US', NumberFormatter::CURRENCY);
echo $fmt->format(12.34);

【讨论】:

  • 谢谢,我没有注意到我滥用了常量。如果没有第二个参数,它确实可以按预期工作。
猜你喜欢
  • 1970-01-01
  • 2018-01-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-20
  • 1970-01-01
  • 2018-03-08
  • 1970-01-01
相关资源
最近更新 更多