(parseFloat, Number)科学记数法的转换

752 阅读1分钟

ParseFloat(0.000000003),Number(0.000000003)会自动转换成科学记数法 '3e-9', 如果你的显示不想要科学记数法时,就可以用以下方法:

eg: NoExponentialNum(3e-9) ==> '0.000000003' NoExponentialNum(0.0000000999999333) ==> '0.0000000999999333"

function NoExponentialNum(val) {
  if(val.toString().length < 20) {
      val = parseFloat(val);
      let exponentialNumReg = /\d(.(\d+))?[eE]{1}[+-]?([1-9]\d*)/;
      let result = exponentialNumReg.exec(val.toString());
      // exponentialNumReg.exec('3.33300e-8')
      // Result -> ["3.33300e-8", ".33300", "33300", "8", index: 0, input: "3.33300e-8"]
      let length = 0;
      if (result && result.length > 0) {
        length = (result[2] ? result[2].length : 0) + parseInt(result[3]);
      }
      return length === 0 ? String(val) : val.toFixed(length);
  } else {
      return val;  // not deal with it
  }
}

局限性:

但是, 这个parseFloat(num)的最长位数也是有限制的,如下的是 小数点25位 出现的结果就是 : parseFloat(0.0000000999999999999999333) ==> '9.999999999999993e-8' parseFloat(0.00000009999999999999999333) ==> '1e-7'

num.toFixed() 规定小数的位数,是 0 ~ 20 之间的值,包括 0 和 20 (0.00000009999999999999999333).toFixed(21) ==> '0.000000100000000000000'

所以目前只支持位数是20.

有待研究...