.1 + .2 为什么不等于.3?

2015-06-17 19:58:02 +08:00
 Clarencep
刚刚有人问我的,没想出来,求教各位大牛 -- 按F12打开js控制台,然后输入:
.1 + .1 == .2 ==> 结果是true
.1 + .2 == .3 ==> 结果是false --- 为啥是false?求解
2057 次点击
所在节点    问与答
4 条回复
pangtianyu
2015-06-17 20:04:36 +08:00
在计算机里面带小数点的运算是 approximate 的 不是精确的
可以参考这里: http://www.zhihu.com/question/31182792
还有 https://zh.wikipedia.org/wiki/%E6%B5%AE%E7%82%B9%E6%95%B0

顺便结果:
> .1+.2
0.30000000000000004
> .3
0.3
YuJianrong
2015-06-17 20:27:13 +08:00
@pangtianyu 这个说法并不十分准确。
准确地说是部分十进制小数没有有限位数的IEEE754浮点二进制表达。

所以:
1. 如果相加的两个小数(以及结果)都能被有限位数(而且在 float/double 位数内)浮点二进制表达,那么结果是精确的。
比如 0.25 + 0.5 === 0.75 这是绝对精确的。
2. 如果相加的两个小数并没有有限位数的 IEEE754浮点二进制表达(比如0.1的浮点表达为1.(1001) *2^(-4) ,其中1001为循环节),那么相加的结果就很有可能不符合预期,因为很难加到同样是数值近似的结果上。

参考 https://zh.wikipedia.org/wiki/IEEE_754
pangtianyu
2015-06-17 20:29:29 +08:00
@YuJianrong 啊 是这样嘛 受教了
blacktulip
2015-06-17 20:37:53 +08:00
二进制十进制来回转换的问题

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

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

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

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

© 2021 V2EX