Nodejs 减号失败
Nodejs failed to subtract number
我尝试用 Node.js 进行计算。
let x = 841251657
console.log((x*x)-x)
我打印了:707704349563994000
。
当我使用 julia 时,我得到 707704350405245649
进行相同的计算。
google 计算器我得到了 7.0770435e+17
。
显然,这里出了点问题。
我该怎么做才能得到正确答案?
如果您使用的是 node > v10.4.0,则您有 BigInt。
let x = 841251657n
console.log(x*x-x)
x 是一个 bigint,如果你附加一个 'n',如上所示
最大安全整数定义为Number.MAX_SAFE_INTEGER
,即(2^53) -1,这是你可以用双精度浮点数表示的最大整数。
> console.log(Number.MAX_SAFE_INTEGER)
9007199254740991
您正在计算的数字明显大于该数字,因此精度正在下降。您可以使用 Number.isSafeInteger((x*x)-x)
.
进行检查
对于这么大的数字,您应该使用 BigInt 库。
我尝试用 Node.js 进行计算。
let x = 841251657
console.log((x*x)-x)
我打印了:707704349563994000
。
当我使用 julia 时,我得到 707704350405245649
进行相同的计算。
google 计算器我得到了 7.0770435e+17
。
显然,这里出了点问题。
我该怎么做才能得到正确答案?
如果您使用的是 node > v10.4.0,则您有 BigInt。
let x = 841251657n
console.log(x*x-x)
x 是一个 bigint,如果你附加一个 'n',如上所示
最大安全整数定义为Number.MAX_SAFE_INTEGER
,即(2^53) -1,这是你可以用双精度浮点数表示的最大整数。
> console.log(Number.MAX_SAFE_INTEGER)
9007199254740991
您正在计算的数字明显大于该数字,因此精度正在下降。您可以使用 Number.isSafeInteger((x*x)-x)
.
对于这么大的数字,您应该使用 BigInt 库。