js 取小数点后几位方法
一 取后两位 为例:
四舍五入
1.toFixed()
Number的toFixed()方法可把 Number 四舍五入为指定小数位数的数字。
const test = 1.12 / 3 // 0.37333333333333335
console.log(test.toFixed(2)) // 0.37
复制代码
注意:
.兼容问题
/**
* firefox/chrome ie某些版本中,对于小数最后一位为 5 时进位不正确(不进位)。
* 修复方式即判断最后一位为 5 的,改成 6, 再调用 toFixed
*/
function(number, precision) {
const str = number + '';
const len = str.length;
let last = str[len - 1] // 或者 str.substr(len - 1, len);
if(last == '5') {
let = '6';
str = str.substr(0, len - 1) + last;
return (str - 0).toFixed(precision)
} else {
return number.toFixed(precision)
}
}
或者为:
function toFixed(number, precision) {
const tempCount = Math.pow(10, precision);
let target = number * tempCount + 0.5;
target = parseInt(des, 10) / tempCount;
return target + '';
}
复制代码
.精确问题
/**
* toFixed 有时候会碰到如下精度缺失问题
* 可以使用下面例子的方法解决
* 或者 (test * 100).toFixed(2) + '%';
*/
const test = 1.12 / 3 // 0.37333333333333335
console.log(test.toFixed(4)) // 0.3733
console.log((test).toFixed(4) * 100 + '%') // 37.330000000000005%
复制代码
- Math.round()
/**
* 利用Math.round
* 保留两位小数
*/
function toDecimal(num) {
let tar = parseFloat(num);
if (isNaN(tar)) { return };
tar = Math.round(num * 100) / 100;
}
/**
* 利用Math.round 强制保留两位小数 10 则为 10.00
* 保留两位小数
*/
function toDecimal(num) {
let tar = parseFloat(num);
if (isNaN(tar)) {return};
tar = Math.round(num * 100) / 100;
let tarStr = tar.toString();
let decIndexOf = tarStr.indexOf('.');
if(decIndexOf < 0) {
tarStr += '.';
decInexOf = tarStr.length;
}
while (tarStr.length <= decIndexOf + 2) {
tarStr += '0';
}
return tarStr;
}
复制代码
不四舍五入
1.先把小数取整 在计算
const test = 1.12 / 3 // 0.37333333333333335
Math.floor(test * 100) / 100 // floor 是向下取整 0.37
复制代码
2.使用正则表达式
const test = 1.12 / 3 // 0.37333333333333335
let target = test + '' // test.toString()
target = target.match(/^\d+(?:\.\d{0, 2}?/)
//输出结果为 0.37。但整数如 10 必须写为10.0000
// 如果是负数,先转换为正数再计算,最后转回负数
作者:maomaoweiw
链接:https://juejin.cn/post/6844903638020816903