[ Python ] print(0.3 == (3 * 0.1)) ->False why?

2018-06-14 15:11:40 +08:00
 Leigg

转换为:
3*0.1 = 0.30000000000000004
为啥捏?

8890 次点击
所在节点    Python
45 条回复
xiaojunjor
2018-06-15 08:55:23 +08:00
yukun666
2018-06-15 09:18:29 +08:00
戾气都这么重的吗 QAQ~
broadliyn
2018-06-15 09:25:12 +08:00
@Leigg 有知识缺口就去补缺口。
实际上我是不支持有问题就去搜索问题的,

虽然这样解决问题成本低,但是这些碎片化的知识对你的知识体系的构建来说危害是非常大的。

你百度出了结果,知道了浮点表示位数是有限的,但是浮点数为什么有限、浮点数二进制是怎么表示的、浮点数二进制四则运算是怎么进行的你缺完全不知道。只知其然,而不知其所以然。
jmc891205
2018-06-15 13:52:00 +08:00
@andylsr 不用浮点数是不可能的
qgb
2020-10-30 14:12:42 +08:00
@ufjfeng 与内置 math.isclose 函数不同,上述方程式在 a 和 b 中不对称–假定 b 是参考值–因此 isclose ( a,b )可能与 isclose ( b,a )不同。此外,atol 的默认值不为零,用于确定应将哪些较小的值视为接近零。默认值适用于阶数为 1 的期望值:如果期望值明显小于 1,则可能导致误报。 应该仔细选择 atol 作为手边的用例。如果 a 或 b 为 atol 的零值将导致 False 是零。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/463105

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX