JS保留小数点后有效数字两位
在想保留小数点后有效数字保留两位时,需用到嵌套方法一层一层的去判断当前位数的数字是否为有效数字,但如遇到小数点过多的数字,js语法会将其自动变为科学记数法进行保存,所以在执行方法时应先判断当前数字是否为科学记数法,如是则将科学记数法数字转换为普通数值。
科学记数法转为普通数值字符串并保留两位小数
transferToNumber(inputNumber) {
// 先判断当前数值是否为NaN
if(isNaN(inputNumber)) {
return inputerNumber;
}
inputerNumber = '' + inputerNumber; // 将数值以科学记数法的形态转化为字符串
inputerNumber = parseFloat(inputNumber);
let eformat = inputerNumber.toExponential(); // 转化为标准的科学记数法形式
let tempArray = eformat.match(/\d(?:\.(\d*))?e([+-]\d+)/); // 分离出小数值和指数值
// tempArray的格式为
// ["2.5e-14", "5", "-14", index: 0, input: "2.5e-14", groups: undefined]
let number = inputerNumber.toFixed(Math.max(0, 1 - tempArray[2]));
return number;
}
保留小数点后两位有效数字
// value为要进行保留小数位的数字,count为计数
significantNum(value, count) {
let newNum = count;
let value1 = parseFloat(value);
let valueString = value.toString();
// 判断数字是否为科学记数法形式
if(valueString.indexOf('e') !== -1) {
return this.transferToNumber(value);
}
let newData = value1.toFixed(newNum + 1);
if(value1 === 0) {
return newData;
}
if(parseFloat(value1.toFixed(2)) === 0) {
if(parseInt(value1 * Math.pow(10, newNum)) === 0) {
newNum++;
return this.significantNum(value1, newNum);
} else {
newData = value1.toFixed(newNum + 1);
}
} else {
newData = value1.toFixed(2);
}
return newData;
}
调用示例
let numData = 1.000000255458;
let newNum = this.significantNum(numData, 1);
console.log(newNum); // 1.00000026