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

Dart中长度为19的数学计算结果运算及四舍五入误差问题

问题原因说明
  • 双精度浮点数精度溢出
    你代码中使用的double类型是IEEE 754标准的双精度浮点数,仅能精确表示[-2^53, 2^53]区间内的整数,你输入的两个数相乘结果约为5.87×10^20,远大于253(约9×1015),整数部分已经无法被double精确存储,存在微小的底层精度误差。你看到控制台打印结果和Excel一致,只是因为打印时仅输出了有限位有效数字,隐藏了底层的误差。
  • toStringAsFixed的舍入规则差异
    Dart的toStringAsFixed默认采用银行家舍入法(四舍六入五成双):当要保留位数的下一位恰好是5时,会判断前一位的奇偶性,偶数舍去、奇数进1,和Excel、普通在线计算器常用的四舍五入规则完全不同。底层存储的微小误差刚好落在舍入规则的边界上时,就会出现可见的结果偏差。
解决方案

如果需要做高精度的财务、统计类计算,不要使用double类型,改用Dart生态里专门的高精度十进制运算库,全程基于十进制规则做运算和舍入,就能避免这类精度问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.10 21:00:02