首页 > 解决方案 > 为什么在 Dart Lang 上 {42.05 + 0.05 } 的输出是这样的?

问题描述

当我在 DartPad 上尝试这个时,输出是这样的。谁能解释一下?

在此处输入图像描述

标签: dartflutterdart-editor

解决方案


这是预期的行为。双精度数不能精确地表示所有小数,也0.05不能42.05精确地表示这些double值所代表的值。确切的值是:

  • 42.0499999999999971578290569595992565155029296875
  • 0.050000000000000000277555756156289135105907917022705078125

如果将这两个精确值相加,则结果可能又不能完全表示为双精度数。两个最接近的可表示双打是:

  • 42.099999999999994315658113919198513031005859375
  • 42.100000000000000142108547152020037174224853515625

其中,前者更接近加法的正确结果,因此double选择表示该结果的值。

这个问题不是 Dart 特有的。所有使用 IEEE-754 64 位浮点数的语言都会得到相同的结果,这可能是所有使用 64 位浮点类型的语言(C、C++、C#、Java、JavaScript 等)。


推荐阅读