//处理科学计数
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
}
transferToNumber(1.34e7) // 13400000
transferToNumber(1.34e-7) // 0.000000134
此方法支持Number和String类型的科学计数法数值。
利用toExponential()函数来将输入数值进行科学计数法标准处理,并且以小写的字母e表示和正、负号,同时该函数也支持一个整型的输入参数,表示保留的小数位数,并且支持四舍五入,toFixed()函数也支持四舍五入;
此外,这里还主要利用match函数和正则表达式,获取到小数位的长度和指数值,例如:
'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"]
match() 方法将检索字符串 String Object,以找到一个或多个与 regexp 匹配的文本。
这个方法的行为在很大程度上有赖于 regexp 是否具有标志 g。如果 regexp 没有标志 g,那么 match() 方法就只能在 stringObject 中执行一次匹配。如果没有找到任何匹配的文本, match() 将返回 null。否则,它将返回一个数组,其中存放了与它找到的匹配文本有关的信息。