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

format-number()函数舍入结果不一致问题咨询

format-number()舍入不一致的原因解析(Saxon-PE 11.4)

这不是操作错误,也不是bug,是format-number()函数默认采用**银行家舍入法(round-half-to-even)**导致的结果。

核心规则说明

银行家舍入的逻辑是:当数值的小数部分恰好为0.5时,会舍入到最近的偶数。这也是你看到以下现象的原因:

  • format-number(37.5,'#')返回38:37.5的最近偶数是38
  • format-number(38.5,'#')返回38:38.5的最近偶数是38

结合你的验证结果分析

你的三组测试代码结果完全对应舍入规则的差异:

  1. format-number的输出与round-half-to-even完全一致:("2","2","4","4","6","6","8","8","10","10"),所有x.5都被舍入到最近的偶数
  2. 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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 03:14:53