【问题标题】: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'

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-12-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多