How to avoid scientific notation for large numbers in JavaScript?

后端 未结 22 2089
無奈伤痛
無奈伤痛 2020-11-22 00:31

JavaScript converts a large INT to scientific notation when the number becomes large. How can I prevent this from happening?

22条回答
  •  梦毁少年i
    2020-11-22 00:53

    I know it's many years later, but I had been working on a similar issue recently and I wanted to post my solution. The currently accepted answer pads out the exponent part with 0's, and mine attempts to find the exact answer, although in general it isn't perfectly accurate for very large numbers because of JS's limit in floating point precision.

    This does work for Math.pow(2, 100), returning the correct value of 1267650600228229401496703205376.

    function toFixed(x) {
      var result = '';
      var xStr = x.toString(10);
      var digitCount = xStr.indexOf('e') === -1 ? xStr.length : (parseInt(xStr.substr(xStr.indexOf('e') + 1)) + 1);
      
      for (var i = 1; i <= digitCount; i++) {
        var mod = (x % Math.pow(10, i)).toString(10);
        var exponent = (mod.indexOf('e') === -1) ? 0 : parseInt(mod.substr(mod.indexOf('e')+1));
        if ((exponent === 0 && mod.length !== i) || (exponent > 0 && exponent !== i-1)) {
          result = '0' + result;
        }
        else {
          result = mod.charAt(0) + result;
        }
      }
      return result;
    }
    
    console.log(toFixed(Math.pow(2,100))); // 1267650600228229401496703205376

提交回复
热议问题