jef*_*max 5 javascript python floating-point
我已经阅读了关于浮点的大部分帖子,我理解使用IEEE 754的基本问题(并且仅仅通过以二进制形式存储数字的性质)某些分数无法表示.我试图找出以下内容:如果Python和JavaScript都使用IEEE 754标准,为什么在Python中执行以下操作?
.1 + .1
结果在0.20000000000000001(这是预期的)
在Javascript(至少在Chrome和Firefox中)的答案是.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
Run Code Online (Sandbox Code Playgroud)
正如所看到的,打印 ING a确实显示0.3-因为默认print轮6张或7位十进制数,在打字时的表达(在此a在提示符是单变量表达式)示出了具有在尽可能多的位数的两倍的结果(从而揭示浮点的内在局限性).
Javascript可能有关于如何显示数字的略微不同的舍入规则,并且舍入的确切细节足以解释您观察到的差异.请注意,例如(在Chrome javascript控制台上):
> (1 + .1) * 1000000000
1100000000
> (1 + .1) * 100000000000000
110000000000000.02
Run Code Online (Sandbox Code Playgroud)
看到?如果你设法看到更多的数字,异常(这必然是有)变得可见了.