format-number()函数舍入结果不一致问题咨询
format-number()舍入不一致的原因解析(Saxon-PE 11.4)
这不是操作错误,也不是bug,是format-number()函数默认采用**银行家舍入法(round-half-to-even)**导致的结果。
核心规则说明
银行家舍入的逻辑是:当数值的小数部分恰好为0.5时,会舍入到最近的偶数。这也是你看到以下现象的原因:
format-number(37.5,'#')返回38:37.5的最近偶数是38format-number(38.5,'#')返回38:38.5的最近偶数是38
结合你的验证结果分析
你的三组测试代码结果完全对应舍入规则的差异:
format-number的输出与round-half-to-even完全一致:("2","2","4","4","6","6","8","8","10","10"),所有x.5都被舍入到最近的偶数round()函数采用传统四舍五入,因此结果为(1,2,3,4,5,6,7,8,9,10),与前两者形成明显差异
自定义舍入方式
如果需要使用传统四舍五入,可以通过format-number的第三个参数指定舍入模式:
format-number(38.5, '#', map{'rounding-mode': 'round-half-up'})
执行后将返回39,符合传统四舍五入预期。
内容的提问来源于stack exchange,提问作者lschult2
相关产品推荐
相关产品推荐

