JavaScript数字转字符串的问题
(5e-7).toString() === "5e-7" ?
回答
拿一个函数和字符串比较?
以下两种情况,JavaScript 会自动将数值转为科学计数法表示
(1) 小于1且小数点后面带有6个0以上的浮点数值:
JavaScript 代码:
- 0.0000003 // 3e-7
- 0.00000033 // 3.3e-7
- 0.000003 // 0.000003
(2) 整数位数字多于21位:
JavaScript 代码:
- 1234567890123456789012 //1.2345678901234568e+21
- 1234567890123456789012.1 //1.2345678901234568e+21
- 123456789012345678901 //123456789012345680000
// 可以处理上面第一种情况
test((5e-7).toString()); // "0.0000005"
test((5e-9).toString()); // "0.000000005"
function test(val) {
const e = String(val)
let rex = /^([0-9]).?([0-9]*)e-([0-9])/
if (!rex.test(e)) return val
const numArr = e.match(rex)
const n = Number('' + numArr[1] + (numArr[2] || ''))
const num = '0.' + String(Math.pow(10, Number(numArr[3]) - 1)).substr(1) + n
return num.replace(/0*$/, '') // 防止可能出现0.0001540000000的情况
}
试了一下,toFixed 好像也可以,只不过得处理一下尾部的 0
具体成因楼上也介绍了,是规范的问题