浏览器中,小于1e-7的数字都会自动转成科学记数法,比如控制台输入0.0000001会自动显示1e-7.
1. 科学计数法转为数据值
1.1. 指数是正数
1.1.1. 调用toString()方法
let eformat = 1.34e5
let number = eformat.toString()
console.log('结果是:',number)
//结果是: 134000
undefined
let eformat = 1.34e8
let number = eformat.toString()
console.log('结果是:',number)
// 结果是: 134000000
1.1.2. 调用new Number
new Number(9e10).valueOf();
// 90000000000
new Number(9e10).toLocaleString();
// '90,000,000,000'
1.2. 指数是负数
1.2.1. 调用toString()方法
let eformat = 1.34e-8
let number = eformat.toString()
console.log('结果是:',number)
// 结果是: 1.34e-8
let eformat = 1.34e-4
let number = eformat.toString()
console.log('结果是:',number)
// 结果是: 0.000134
1.2.2. 调用new Number
new Number(9e-4).toLocaleString();// 0
new Number(9e-4).valueOf();// 0.0009
new Number(9e-7).valueOf();// 9e-7
定义处理方法
function transferToNumber(inputNumber) {
if (isNaN(inputNumber)) {
return inputNumber
}
inputNumber = '' + inputNumber
inputNumber = parseFloat(inputNumber)
let eformat = inputNumber.toExponential() // 转换为标准的科学计数法形式(字符串)
let tmpArray = eformat.match(/\d(?:\.(\d*))?e([+-]\d+)/) // 分离出小数值和指数值
let number = inputNumber.toFixed(Math.max(0, (tmpArray[1] || '').length - tmpArray[2]))
return number
}
'1.34e-7'.match(/\d(?:\.(\d*))?e([+-]\d+)/)
// 结果是:["1.34e-7", "34", "-7"]
'1.34e+7'.match(/\d(?:\.(\d*))?e([+-]\d+)/)
// 结果是:["1.34e+7", "34", "+7"]
1.34e-7.toFixed(9)
// 结果是: '0.000000134'
transferToNumber(1.34e-7)
// '0.000000134'
transferToNumber(1.34e9)
// '1340000000'
transferToNumber(1.34e6)
// '1340000'
transferToNumber(1.34e-9)
// '0.00000000134'
transferToNumber(1.56)
// '1.56'