对formatCurrency()
类使用NumberFormatter
方法和瑞士法郎的货币对我来说,四舍五入到最接近的镍金额(0.05)。
代码:
$formatter = new \NumberFormatter('en_US', \NumberFormatter::CURRENCY);
echo $formatter->formatCurrency('12.34', 'CHF');
结果:
CHF12.35
请注意,数字量12.34会四舍五入为12.35。起初,我认为这可能是预料之中的,这是一种我不熟悉的处理资金的新方式。事实证明,这不是应该的工作方式。 (https://money.stackexchange.com/q/105014/81599)
为什么它会四舍五入到PHP中最接近的镍含量,我该如何解决?
答案 0 :(得分:1)
答案实际上在PHP之外,在ICU library内,PHP通过Internationalization extension包装。事实证明,我有一个过时的ICU库版本(50.x),其中包含镍四舍五入的bug。更新到最近的ICU库(截至今天,63.1)将使您能够使用最新的国际化标准,包括此错误修复程序。我不确定ICU的哪个特定升级解决了我的问题,但是我知道最新的解决方法可以解决此问题。
首先为什么会发生这种情况,瑞士淘汰了本币种的0.01面额,而最低面额实际上是现金量的0.05面额。可能,从事ICU工作的开发人员会因为阅读this Unicode chart而感到困惑,例如,起初可能会产生误导。
相关: