Har*_*639 6 javascript biginteger
这是我面临的一个奇怪问题.当我将一些大数字传递给JS函数(自定义或内置)时,该值会自动增加1.例如,请参阅:
<!DOCTYPE html>
<html>
<body>
<p>Click the button to display an alert box.</p>
<button onclick="myFunction()">Try it</button>
<script>
function myFunction()
{
alert(10466511635124471);
}
</script>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
在我看到的警报中10466511635124472,而不是10466511635124471.有人可以解释这种行为吗?
我在FF 17.0.10和Chrome 12.0.742.122以及IE 8中检查了这个.
这与IEEE754 双精度 64 位浮点数学1的性质有关(所有兼容的 JavaScript 实现都使用这种形式的 IEEE 算术)——您的数字 10 466 511 635 124 471 大于最大正整数可以表示为连续数字,即 2 53 (9 007 199 254 740 992)。JavaScript 中数字的 64 位使用 1 位表示符号、52 位表示数字(指数的特殊行为有效地实现 53 位精度)和 11 位表示指数,这就是情况的原因。
当你的数字超过这个最大数字时,它将使用大于1的指数来表示,这将导致尽可能小的表示降低。如果指数为 2(如您的情况所示),数字的最小可微分变化将是 2,并且由于您的数字介于这两者之间,因此它将四舍五入到最接近的一个。
JavaScript 没有任何任意大小的整数格式,也不支持任何类似于BigNum(使用 Java 术语)或任意精度算术的内容。如果您想存储更大的数字,则必须使用其他存储方法,例如字符串。
1: 我已经链接到维基百科,因为实际规范确实需要花钱才能合法/官方获得——如果有人有更好的来源,请编辑它。
| 归档时间: |
|
| 查看次数: |
127 次 |
| 最近记录: |