科学计数法转换成正常值
function toNonExponential(num) {
if (isNaN(num)) {
return num;
}
num = Number(num);
let m = num.toExponential().match(/\d(?:\.(\d*))?e([+-]\d+)/);
return num.toFixed(Math.max(0, (m[1] || '').length - m[2]));
}
// toNonExponential(3.24e+10) => "32400000000"
上面的方法使用的时候发现当num为2.159561752165522e+21时,不能正常转换成2159561752165522000000
更新方法
/**
* @description 科学计数法转为string
* @param {string, number} param
*/
function toNonExponential(param) {
let strParam = String(param)
let flag = /e/.test(strParam)
if (!flag) return param
// 指数符号 true: 正,false: 负
let sysbol = true
if (/e-/.test(strParam)) {
sysbol = false
}
// 指数
let index = Number(strParam.match(/\d+$/)[0])
// 基数
let basis = strParam.match(/^[\d\.]+/)[0].replace(/\./, '')
if (sysbol) {
return basis.padEnd(index + 1, 0)
} else {
return basis.padStart(index + basis.length, 0).replace(/^0/, '0.')
}
}