为什么PHP';s数字格式镍四舍五入格式瑞士法郎金额?

为什么PHP';s数字格式镍四舍五入格式瑞士法郎金额?,php,currency,icu,intl,Php,Currency,Icu,Intl,对于我来说,使用CHF(瑞士法郎)货币类的方法将金额四舍五入到最接近的镍币金额(0.05) 代码: 结果: 12.35瑞士法郎 请注意,数字量12.34取整为12.35。起初,我认为这可能是意料之中的,是我不熟悉的一种新的理财方式。事实证明,这不是它应该如何工作的。() 在PHP中,为什么要向上/向下舍入到最接近的镍量?我如何修复它?答案实际上不在PHP范围内,PHP通过包装。事实证明,我有一个过时版本(50.x)的ICU库,其中包含了镍舍入错误。更新到最近的ICU库(从今天起)将允许您使用最新

对于我来说,使用CHF(瑞士法郎)货币类的方法将金额四舍五入到最接近的镍币金额(0.05)

代码:

结果:

12.35瑞士法郎

请注意,数字量12.34取整为12.35。起初,我认为这可能是意料之中的,是我不熟悉的一种新的理财方式。事实证明,这不是它应该如何工作的。()


在PHP中,为什么要向上/向下舍入到最接近的镍量?我如何修复它?

答案实际上不在PHP范围内,PHP通过包装。事实证明,我有一个过时版本(50.x)的ICU库,其中包含了镍舍入错误。更新到最近的ICU库(从今天起)将允许您使用最新的国际化标准,包括此错误修复。我不确定ICU的哪个特定升级解决了我的问题,但我知道最新的升级解决了这个问题

至于最初为什么会发生这种情况,瑞士逐步取消了其货币的0.01面额,而最低面额实际上是0.05面额的现金。在ICU工作的开发人员可能会感到困惑,比如说,阅读一开始可能会产生误导

相关的:

$formatter = new \NumberFormatter('en_US', \NumberFormatter::CURRENCY);
echo $formatter->formatCurrency('12.34', 'CHF');