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.
有待研究...
来源: http://www.qdfuns.com/article/21400/2a9eb5ee54cf206e41f1dcd1811e3647.html