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

Saxon XSLT sum函数计算异常问题咨询

问题解答

这是典型的二进制浮点数精度误差问题,并非Saxon的bug:

  • 十进制小数如196.30和1018.57无法被二进制浮点数精确存储(类似十进制无法精确表示1/3),在计算过程中会积累微小的精度偏差,最终导致结果出现1214.8700000000001这类近似值。

针对这个问题,有两种常用解决方式:

  1. 使用精确的十进制类型计算
    在XSLT中显式将数值转换为xs:decimal类型,它基于十进制存储,能避免浮点数精度损失:

    sum(($value1, $value2) ! xs:decimal(.))
    

    这种方式适合对精度要求高的场景(比如货币计算)。

  2. 格式化结果修正显示
    如果无法切换类型,可通过format-number函数将结果四舍五入到指定小数位数:

    format-number(sum(($value1, $value2)), '#.00')
    

    该方式会将结果格式化为保留两位小数的字符串,输出1214.87。

内容的提问来源于stack exchange,提问作者Srii

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 19:54:49