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.
有待研究...