之前我遇到过这个问题,但是有浮点数。与this other post相似。但现在这是正常的数字。
我试图这样做:
var
str = 'asdf_10150663120210603',
num = +str.split('_')[1];
console.log(num);
// 10150663120210603 expected
// 10150663120210604 actually resulting
所以我试过,在Node& Chrome Inspector,只需输出数字。
console.log(10150663120210603);
// 10150663120210604 actually resulting
是否有任何疯狂的方式,无论是否为hackish,使变量等于10150663120210603。或者我必须使用字符串吗?
答案 0 :(得分:3)
JavaScript中的浮点数是64位IEEE-754浮点值。它们只有52位用于尾数,你的数字需要54位来表示。它只是圆满了。
如果它舍入为10150663120210604,则可以用52位表示。
答案 1 :(得分:2)
JavaScript使用IEEE 754 double-precision floating-point format来表示所有数字,该格式可以精确表示最多2 ^ 52的整数。由于您的数字大于最大的可精确表示的整数,因此它会被舍入。
答案 2 :(得分:1)
JavaScript使用IEEE-754双精度(64位)格式表示数字。据我所知,这给你53位精度,或十五到十六位小数。您的号码比JavaScript可以处理的数字更多,因此您最终会得到近似值。
如果您不需要对数字进行任何数学运算,那么最简单的解决方法就是将它们表示为字符串。
否则,您可以使用big int library(或实施自己的)。