我已经阅读了这里有关浮点的大部分帖子,并且我了解使用 IEEE 754(并且仅根据以二进制存储数字的性质)无法表示某些分数的基本问题。我试图弄清楚以下问题:如果Python和JavaScript都使用IEEE 754标准,为什么在Python中执行以下内容
.1 + .1
结果是
0.20000000000000001(这是预期的)
在 Javascript 中(至少在 Chrome 和 Firefox 中),答案是 0.2
然而表现
.1 + .2
两种语言的结果都是
0.30000000000000004
此外,执行
var a = 0.3;在 JavaScript 中并打印结果
0.3
在 Python 中执行 a = 0.3 会得到 0.29999999999999999
我想了解这种行为差异的原因。
此外,许多关于 OS 的帖子都链接到 Java BigDecimal 的 JavaScript 端口,但该链接已失效。有人有副本吗?
在 Python 中执行 a = 0.3 结果为
0.29999999999999999
不完全是——看:
>>> a = 0.3
>>> print a
0.3
>>> a
0.29999999999999999
如你所见,printing a
确实显示0.3
-- 因为默认情况下print
输入表达式时,四舍五入为 6 或 7 位小数(此处a
是一个单变量表达式)在提示符处显示结果的位数是两倍多(从而揭示了浮点的内在局限性)。
JavaScript 关于如何显示数字的舍入规则可能略有不同,舍入的确切细节足以解释您观察到的差异。请注意,例如(在 Chrome javascript 控制台上):
> (1 + .1) * 1000000000
1100000000
> (1 + .1) * 100000000000000
110000000000000.02
看?如果你设法看到更多数字,就会发现异常现象(这不可避免地会出现)are那里)也变得可见。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)