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

使用FieldValue.increment处理小数时求和结果异常的问题

问题原因及解决办法

原因

这是二进制浮点数的精度缺陷导致的:

  • 像988.95这类十进制小数,无法用Java的Double类型(二进制浮点数)精确存储,实际在内存中是一个接近该值的近似值。
  • 当你通过Double.parseDouble()转换输入值,再用FieldValue.increment()进行运算时,这些微小的精度误差会被保留并写入Firestore,最终出现488.95000000005这类带误差的结果。

解决办法

最可靠的方案是用整数类型存储金额:

  • 将金额以“分”为单位存储(比如988.95元存为整数98895),用户输入的500元对应50000。
  • 运算时直接对整数做加减,再写入Firestore,完全避免浮点数精度问题。

如果业务场景必须保留小数形式,可以考虑:

  • 使用Firestore支持的Decimal类型(对应Java中的BigDecimal)来处理数值,BigDecimal能精确表示十进制小数,运算后写入的结果会是准确的488.95。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 01:12:04