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

jq中正确实现小数加法:解决预余额与金额求和偏差问题

解决浮点数求和精度不匹配问题

这是二进制浮点数的精度缺陷导致的——像-2865.59这类十进制小数无法被二进制浮点数精确存储,直接相加时会产生微小误差,导致计算结果和给定的balance不一致。

用以下jq方法可以得到正确的计算值:

方法:整数运算规避浮点误差

将所有数值放大为整数(针对两位小数的金额,乘以100)完成计算后,再缩小回原单位:

map({
  prebalance,
  amount,
  balance,
  calculated_balance: (.prebalance * 100 + .amount * 100) / 100
})

验证示例数据

  • 第一个对象:(-2865.59 * 100) + (3000.00 * 100) = 13441,除以100后得到134.41,与balance一致
  • 第二个对象:(-1865.59 * 100) + (2000.00 * 100) = 13441,除以100后同样得到134.41

如果涉及更多小数位,只需调整放大倍数(比如三位小数乘1000),核心是用整数运算避免浮点精度丢失。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 16:18:20