为什么JavaScript会自动转换某些数字值

时间:2011-11-12 12:17:19

标签: javascript

我在JavaScript中使用数字数据类型

进行了相同的处理
var num = 9223372036854775807;

但是当我尝试在浏览器中打印此变量时

alert(num)

值更改为9223372036854776000

有什么想法吗?

4 个答案:

答案 0 :(得分:13)

Javascript号码实际上是double precision floats。可以精确存储的最大整数是2 53 ,远低于你的2 63 -1。

alert( Math.pow(2, 53) - 1 ) // 9007199254740991
alert( Math.pow(2, 53)     ) // 9007199254740992
alert( Math.pow(2, 53) + 1 ) // 9007199254740992

答案 1 :(得分:1)

Javascript将long存储为javascript号码(64位浮点数)。并且9223372036854776000是MAX。

您是数字操作还是可以将其存储为字符串?

答案 2 :(得分:1)

因为js中数字的最大整数值是9007199254740992。有关详细信息,请参阅What is JavaScript's highest integer value that a Number can go to without losing precision?

答案 3 :(得分:0)

问题完全如@missingno所述,可能是最好的解决方案,如果你真的需要处理大数字是BigNumber类:http://jsfromhell.com/classes/bignumber

值得注意的是,与其他语言相比,这不是一种有效的计算方法,但它可能是最容易在JavaScript中管理的。