谁能给我解释一下为什么9999999999999999会被转换成10000000000000000?
alert(9999999999999999); //10000000000000000
发布于 2012-11-17 17:52:02
Javascript没有整数,只有64位浮点数--而且你已经用完了浮点精度。
请参阅Java中的类似问题:why is the Double.parseDouble making 9999999999999999 to 10000000000000000?
发布于 2012-11-17 17:55:33
摘要:浮点数只包含有限的精度,超过15位(或更多),您将进行舍入。
发布于 2012-11-17 18:00:32
在JavaScript中,9999999999999999
在内部被视为浮点数。它不能精确地用IEEE754双精度表示,因为它需要54位精度(位数是log2(9999999999999999) = 53,150849512...由于分数位不存在,因此结果必须向上舍入),而IEEE754仅提供53位(1个隐含位+ 52个显式存储的尾数位)-少一个位。因此,这个数字只需进行四舍五入。
因为在这种情况下只丢失了一位,所以即使是54位的数字也是完全可以表示的,因为它们仍然在位中包含0
,这会丢失。给定IEEE 754的默认无偏舍入模式,奇数54位数字被舍入为最接近的值,恰好是双倍偶数53位数字。
https://stackoverflow.com/questions/13429451
复制相似问题