在JavaScript中遇到大整数加法的问题

时间:2016-12-17 20:37:57

标签: javascript jquery floating-point precision integer-overflow

我只是制作一个非常简单的程序将二进制数转换为十进制数,反之亦然。在进行十进制到二进制转换时,我意识到当我尝试将一个小数字添加到一个非常大的数字时,我遇到了一个奇怪的错误。例如,我将我的程序输入220002作为小数,它会将该数字转换为二进制数110101101101100020.在调试时,我意识到最后它做了110101101101100000 + 10,结果是110101101101100020。

我很困惑为什么会这样。我不太确定,帮助将不胜感激。它也用较小的数字来做,例如有时它会以二进制形式执行大量数字+ 1它根本不会改变二进制数。如果它有帮助,这是我的代码。

$("#convertDecimalBinary").on("click", function() {
    var decimal = $("#inputDecimal").val();
    console.log(!isNaN(decimal));
    if(!isNaN(decimal)) {
      var binary = 0;
      var multiplier = 1;
      var num = 1;
      while(num * 2 <= decimal) {
        num *= 2;
        multiplier *= 10;
      }
      while(decimal > 0) {
        if(decimal - num >= 0) {
          decimal -= num;
          binary += multiplier;
        }
        num /= 2;
        multiplier /= 10;
      }
      $("#inputBinary").val(binary);
    }
  })

1 个答案:

答案 0 :(得分:0)

请参阅float64This gives 15–17 significant decimal digits precision.。你的号码有18位数。