dart - 为什么在 Dart Lang 上 {42.05 + 0.05 } 的输出是这样的?
解决方案
这是预期的行为。双精度数不能精确地表示所有小数,也0.05
不能42.05
精确地表示这些double
值所代表的值。确切的值是:
- 42.0499999999999971578290569595992565155029296875
- 0.050000000000000000277555756156289135105907917022705078125
如果将这两个精确值相加,则结果可能又不能完全表示为双精度数。两个最接近的可表示双打是:
- 42.099999999999994315658113919198513031005859375
- 42.100000000000000142108547152020037174224853515625
其中,前者更接近加法的正确结果,因此double
选择表示该结果的值。
这个问题不是 Dart 特有的。所有使用 IEEE-754 64 位浮点数的语言都会得到相同的结果,这可能是所有使用 64 位浮点类型的语言(C、C++、C#、Java、JavaScript 等)。
推荐阅读
- ignite - 启动时出现“IgniteCheckedException:未配置请求的 DataRegion”
- python - 如何使用 python 客户端查看/验证 pod eviction 调用是否完整?
- javascript - 地图如何在角度上进行观察
- python - 无法获得连接到网页中某个选项卡的选择性名称
- javascript - 如何在 JS 文件中导入 API/外部 JS?
- c++ - 当 cin 和 cout 解开时使用 std::endl vs "\n"
- reactjs - this.setState 后表单未重置 - 反应
- c# - .NET Framework 4.7.2 升级 - 无法加载项目文件
- python - 为什么我得到一个无效的语法
- wordpress - 部署到 NETLIFY 时:TypeError:无法读取未定义的属性“数据”-插件 gatsby-source-wordpress 返回错误