【问题标题】:JavaScript: What is the sum of two numbers in javascript?JavaScript:javascript中两个数字的总和是多少?
【发布时间】:2021-01-08 05:48:39
【问题描述】:

遇到一个问题

有人知道为什么会得到这样的结果吗?

let x = 4153000000000000000 + 99
console.log(x) // 4153000000000000000

let y = 4153000000000000000 + 990
console.log(y) // 4153000000000001000

let z = 4153000000000000000 + 9900
console.log(z) // 4153000000000009700

【问题讨论】:

  • console.log(Number.MAX_SAFE_INTEGER) JavaScript 数字不能代表那么大的值。
  • 好的,但是为什么它代表 +990 或 +9900 而为什么不代表 +99 呢?
  • @RobbyCornelissen 如果是这样,那么它应该得到相同的结果
  • 不,因为 JavaScript 数字是浮点类型。它们的存储方式使得可以表示 所有 整数到 MAX_SAFE_INTEGER,但也可以表示超出该范围的 一些 整数。

标签: javascript numbers integer biginteger


【解决方案1】:

所以您的问题是您使用的数字大于 Integer 的最大容量 9007199254740991。因此任何大于 9007199254740991 的数字都会导致异常行为。

使用类似的东西:

let x = BigInt("4153000000000000000")

let y = BigInt("1235")

let z = x + y;

document.write(z);
console.log(z)

【讨论】:

    【解决方案2】:

    这是因为 IEEE。 2^53以上的数字需要用big Int来完成。

    最安全的最大数是

    let a = Number.MAX_SAFE_INTEGER;
    //console.log(9007199254740991);
    

    最小数量是

     let b = Number.MIN_SAFE_INTEGER;
     //console.log(-9007199254740991);
    

    为了解决这个问题,我们使用 BigInt;

    let sum = 4153000000000000000n + 99n;
    console.log(sum); // 4153000000000000099n
    

    您可以点击here了解更多详情。 // MDN

    更多参考here //Stackoverflow

    【讨论】:

    • 它不是“JavaScript 数字”,它的 IEEE 754 数字已被绝大多数现代计算平台实现。在大多数其他编程语言中,您会看到完全相同的效果。
    【解决方案3】:

    您的操作结果超出了 JavaScript 数字类型可以安全表示的范围:

    console.log(Number.MAX_SAFE_INTEGER); // 9007199254740991

    如果要处理更大的数字,可以使用内置的BigInt类型:

    const z = 4153000000000000000n + 9900n;
    console.log(`Result: ${z}`); // 4153000000000009900

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-04
      • 1970-01-01
      • 2020-08-10
      • 1970-01-01
      • 2018-07-31
      • 1970-01-01
      • 1970-01-01
      • 2021-11-15
      相关资源
      最近更新 更多