我在JavaScript中使用数字数据类型
进行了相同的处理var num = 9223372036854775807;
但是当我尝试在浏览器中打印此变量时
alert(num)
值更改为9223372036854776000
有什么想法吗?
答案 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中管理的。