我打开终端浏览器(例如Chrome)。
我写这个:
var y = "11000011010101011";
“11000011010101011”
parseInt(y)
11000011010101012
我期待11000011010101011
,但它会返回11000011010101012
。
有人知道为什么吗?
答案 0 :(得分:6)
Javascript中的每个数字都表示为double precision floating point。 JavaScript可以准确地表示最大为9007199254740991(2 ^ 53 - 1)的整数。一旦超过这个限制,你就会失去精确度。
答案 1 :(得分:0)
只有9007199254740991
是javascript中的安全整数。
这是类似
9007199254740992 + 1 // 9007199254740992
9007199254740993 + 1 // 9007199254740992
9007199254740994 + 1 //9007199254740996
请参阅链接了解更多详情 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number http://www.2ality.com/2012/04/number-encoding.html
另见这一个
how addition of Number works on max limit numbers?
这是与其原始相关的问题
答案 2 :(得分:0)
根据this页面。
Javascript中的所有数字都是64位浮点数,整数由53位mantisa表示。 因此,您不能存储大于2 ^ 53 -1且小于-2 ^ 53 +1的整数而不会丢失精确度(Javascript会对您的数字进行舍入以便能够存储它)。
您的号码大于2 ^ 53 -1。尽管String可以存储它,但为了将它存储在“Number”变量中,它必须被舍入,失去精度并返回一个稍微不同的数字。