精度计算的时候我们通常会使用 .toFixed()
方法,Number.toFixed(digits)
方法使用定点表示法来格式化一个数,会对结果进行四舍五入。参数 digits
表示小数点后数字的个数,一般介于 0 到 20 (包括)之间。例如:
JavaScript 代码:
3.3e-7.toFixed(8); // “0.00000033” 3e-7.toFixed(8); // “0.00000030”
一般情况下,我们的需求小数位数是固定的,所以这个基本可以满足我们的需求。但是有些人可能不喜欢 0.00000030
这种形式,认为最后的 0
是多余的。所以索性就改进了一下:
JavaScript 代码:
function toNumberStr(num,digits) { // 正则匹配小数科学记数法 if (/^(\d+(?:.\d+)?)(e)([-]?\d+)$/.test(num)) { // 正则匹配小数点最末尾的0 var temp=/^(\d{1,}(?:,\d{3}).(?:0[1-9]+)?)(0*)?$/.exec(num.toFixed(digits)) ; if(temp){ return temp[1]; }else{ return num.toFixed(digits) } }else{ return “”+num } } toNumberStr(3.3e-7,8) // “0.00000033” toNumberStr(3e-7,8) // “0.0000003” toNumberStr(1.401e10,8) // “14010000000” toNumberStr(0.0004,8) // “0.0004”
这个方法基本满足了我的需求,但是总是觉得一点累赘,后面那个参数意思也不够明确,所以发到微信群请大家帮忙优化。特别感谢网友 @caikan 提供的方法:
JavaScript 代码:
function toNonExponential(num) { var m = num.toExponential().match(/\d(?:.(\d*))?e([±]\d+)/); return num.toFixed(Math.max(0, (m[1] || ‘’).length - m[2])); } toNonExponential(3.3e-7) // “0.00000033” toNonExponential(3e-7) // “0.0000003” toNonExponential(1.401e10) // “14010000000” toNonExponential(0.0004) // “0.0004”