为什么这会发生在JavaScript中的数字中

时间:2015-08-20 12:59:51

标签: javascript

找到此here

enter image description here

这怎么工作?这里发生了什么?为什么第一行的数字会发生变化?

2 个答案:

答案 0 :(得分:3)

  

JavaScript使用IEEE 754中规定的双精度浮点格式数字,只能安全地表示 - (2 53 - 1)和2 53 之间的数字 - 1。

号码111111111111111111(18位数)高于该范围。

参考:Number.MAX_SAFE_INTEGER

答案 1 :(得分:0)

如上所述,JavaScript使用double-precision 64-bit floating point format作为数字。 52位保留用于值,11位用于指数,1位用于加号/减号。

这个数字的整个处理在这个video中得到了很好的解释。从本质上讲,JavaScript使用一个沿52位移动的指针来标记浮点。当然,您需要更多位来表示更大的数字,例如您的111111111111111111。

要将您的号码转换为二进制文件,它将是

sign - 0
exponent - 10000110111
mantissa - 1000101010111110111101111000010001100000011100011100

值占用的空间越多,小数位数就越少。

最终,由于最右边缺少位,简单计算(如递增1)将变得不准确,可能的最小增量将取决于指针的位置。