PHP NumberFormatter::formatCurrency处理塞尔维亚第纳尔会舍入,此行为正常吗?如何显示小数?
问题解答
行为是否正常?
这是正常现象。原因是塞尔维亚第纳尔(RSD)的实际流通体系中没有小于1第纳尔的辅币单位,PHP的NumberFormatter依赖的底层国际化组件ICU会遵循各国货币的实际规则,自动将金额舍入到整数位,所以输出只显示整数部分。而你测试的PLN、TRY等货币本身有辅币单位(如格罗申、库鲁什),因此会保留小数位。
如何强制显示小数位?
如果需要强制显示两位小数,可以通过setAttribute方法手动设置最小和最大小数位数:
$formatter = new NumberFormatter('sr_RS', NumberFormatter::CURRENCY); $formatter->setAttribute(NumberFormatter::MIN_FRACTION_DIGITS, 2); $formatter->setAttribute(NumberFormatter::MAX_FRACTION_DIGITS, 2); echo $formatter->formatCurrency('127.43', 'RSD'); // 输出:127,43 дин.
这样就能让RSD金额显示小数部分,即使不符合当地实际货币规则。
内容的提问来源于stack exchange,提问作者Amin Behravesh
相关产品推荐
相关产品推荐

