【问题标题】:Nodejs failed to subtract numberNodejs无法减去数字
【发布时间】:2019-09-05 13:56:42
【问题描述】:
我尝试使用 Node.js 进行此计算。
let x = 841251657
console.log((x*x)-x)
我得到:707704349563994000 已打印。
当我使用 julia 时,我得到 707704350405245649 进行相同的计算。
我得到了7.0770435e+17 用于谷歌计算器。
显然,这里出了点问题。
我该怎么做才能得到正确答案?
【问题讨论】:
标签:
javascript
math
julia
division
subtraction
【解决方案1】:
最大安全整数定义为Number.MAX_SAFE_INTEGER,即(2^53) -1,这是你可以用双精度浮点数表示的最大整数。
> console.log(Number.MAX_SAFE_INTEGER)
9007199254740991
您计算的数字远大于该数字,因此会丢失精度。您可以通过Number.isSafeInteger((x*x)-x) 进行检查。
对于这么大的数字,您应该使用 BigInt 库。
【解决方案2】:
如果您使用的是 node > v10.4.0,则您有 BigInt。
let x = 841251657n
console.log(x*x-x)
x 是一个 bigint,如果你如上所示附加一个 'n'