炫意html5
最早CSS3和HTML5移动技术网站之一

JavaScript数字转字符串的问题

(5e-7).toString() === “5e-7” ?

回答

拿一个函数和字符串比较?

以下两种情况,JavaScript 会自动将数值转为科学计数法表示

(1) 小于1且小数点后面带有6个0以上的浮点数值:

JavaScript 代码:

  1. 0.0000003 // 3e-7
  2. 0.00000033 // 3.3e-7
  3. 0.000003 // 0.000003

(2) 整数位数字多于21位:

JavaScript 代码:

  1. 1234567890123456789012 //1.2345678901234568e+21
  2. 1234567890123456789012.1 //1.2345678901234568e+21
  3. 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
image.png

具体成因楼上也介绍了,是规范的问题
image.png

炫意HTML5 » JavaScript数字转字符串的问题

CSS3教程HTML5教程