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

Dart中对浮点数0.0累加0.1出现异常结果的原因咨询

为什么Dart中用while循环累加0.1会出现精度问题?

我在Dart中编写代码,想要打印0.1、0.2、0.3……1.0的序列,使用while循环实现了如下代码:

void main() {
  var i = 0.0;
  while (i <= 1) {
    print(i);
    i += 0.1;
  }
}

但运行后得到了不符合预期的输出:

0.1
0.2
0.30000000000000004
0.4
0.5
0.6
0.7
0.7999999999999999
0.8999999999999999
0.9999999999999999

问题原因

这是浮点数的二进制存储特性导致的精度误差:

  • Dart中的double类型遵循IEEE 754标准,用二进制存储浮点数。但像0.1这样的十进制小数,转换成二进制后是无限循环的小数,无法被精确存储,计算机只能存储它的近似值。
  • 每次累加这个近似值时,误差会不断累积。比如0.1的近似值加两次后,和精确的0.2之间的误差还不明显,但加三次后,累积的误差就会让结果变成0.30000000000000004这类偏离预期的数值。
  • 另外循环没有输出1.0,是因为累加后的近似值永远达不到精确的1.0。当i变为0.9999999999999999时,再加0.1的近似值会超过1.0,此时i <= 1的条件不满足,循环终止,所以不会打印1.0。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 05:00:59