第一个问题: 在 java 脚本中,如果我们这样做的话。
0.2 + 0.1
=>0.30000000000000004
因为 0.2、0.1 被四舍五入为不同的数字,并且总和也被四舍五入为不同的数字 This article explains the behind the scenes .我明白这一点但是 当我这样做的时候。
0.3 + 0
=>0.3
它显示 0.3 为什么? 0.3 不能用二进制正确表示,应该四舍五入到不同的数字吧?
所以 0.3 + 0 的值应该是 0.3 的四舍五入数和总和(如果需要)?
第二个问题:
当我们这样做的时候。
let x = 0.3
由于 0.3 无法用二进制精确表示,因此它被四舍五入为另一个数字,但是当您访问变量 x 时,为什么它显示 0.3 而不是实际四舍五入的数字。
x
=>0.3
但是当你这样做的时候。
0.2 + 0.1
=>0.30000000000000004
它显示数字的实际四舍五入但不是 0.3。 请解释。
最佳答案
添加 0.1
时得到的值和 0.2
以及您从文字中获得的值 0.3
是不同的值(两者都不正好是 3/10,两者都非常接近)。 (添加 0
无关紧要,它不会更改添加到的数字的值。)您从 0.1 + 0.2
获得的那个刚刚超过 3/10;你从0.3
得到的那个(如果我没记错的话)不到 3/10ths。
在将 float 转换为文本时,JavaScript 遵循通常的做法,即仅包含所需数量的数字,以将其与格式可以表示的下一个最接近的值区分开来(详情 in the spec 和 the academic paper the spec references )。 0.3
不需要任何额外的数字来区分,但是 0.30000000000000004
确实(我猜想将它与 0.3
区分开来,但我实际上并不知道)。
关于javascript - 为什么 0.3 + 0 == 0.3 和 0.1 + 0 == 0.1 在 javascript 中,而 0.3 和 0.1 不能用二进制精确表示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71108587/