JS保留小数点后有效数字两位
在想保留小数点后有效数字保留两位时,需用到嵌套方法一层一层的去判断当前位数的数字是否为有效数字,但如遇到小数点过多的数字,js语法会将其自动变为科学记数法进行保存,所以在执行方法时应先判断当前数字是否为科学记数法,如是则将科学记数法数字转换为普通数值。
科学记数法转为普通数值字符串并保留两位小数
transferToNumber(inputNumber) {// 先判断当前数值是否为NaNif(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