You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 13:27:04