Javascript 数字在改变价值

Javascript 数字在改变价值,javascript,floating-point,Javascript,Floating Point,我以前遇到过这个问题,但用的是浮点数。类似但现在是正常数字 我试着这么做: var str = 'asdf_10150663120210603', num = +str.split('_')[1]; console.log(num); // 10150663120210603 expected // 10150663120210604 actually resulting 因此,我尝试在Node&Chrome检查器中简单地输出数字 console.log(101506631

我以前遇到过这个问题,但用的是浮点数。类似但现在是正常数字

我试着这么做:

var 
    str = 'asdf_10150663120210603',
    num = +str.split('_')[1];

console.log(num);
// 10150663120210603 expected
// 10150663120210604 actually resulting
因此,我尝试在Node&Chrome检查器中简单地输出数字

console.log(10150663120210603);
// 10150663120210604 actually resulting

是否有任何疯狂的方法,不管是否有黑客行为,使变量等于101506631210210603。还是必须使用字符串?

JavaScript中的浮点数是64位IEEE-754浮点数。尾数只有52位,数字需要54位来表示。只是四舍五入而已


如果四舍五入为101506631210604,则可以用52位表示。

JavaScript用于表示所有数字,并且该格式可以精确表示最高达2^52的整数。由于您的数字大于可精确表示的最大整数,因此将对其进行舍入。

JavaScript使用双精度(64位)格式表示数字。据我所知,这会给你53位的精度,或15到16位的十进制数字。您的数字比JavaScript所能处理的数字还要多,因此您最终得到了一个近似值

如果您不需要对数字进行任何数学运算,那么最简单的解决方法就是将它们表示为字符串


否则,您可以使用(或实现您自己的)。

这是同样的问题,因为JavaScript中只有浮点数。您想要这个数字的具体用途是什么?确实存在用于JS的bignum库,例如,我使用的节点模块接受JS变量并创建insert/replace语句。并根据变量的类型调整语句。因此,许多
123
将创建类似
插入x(n)值(123)
的内容,而
'123'
字符串将导致
插入x(n)值('123')
。虽然数据库的设置不是很严格,所以应该可以。是的。