刚接手一个项目,老板要求先保留两位小数,后面加到四位小数,之后又说保留小数点四的同时的后面还有小数的都得向上加一。 这改来改去的谁受得了,老子不...(想了一下家里还有80老母)还是总结一下,方便以后再改动。
一、取整
1,直接取整(丢弃小数部分)
let num = parseInt(5/3); // 1
2,四舍五入取整
let num = Math.round(5/3); // 2
3,向上取整
let num = Math.ceil(5/3); // 2
4,向下取整
let num = Math.floor(5/3); // 1
二、保留小数点后N位
1,使用 toFixed() 方法
(1)方法介绍
toFixed() 方法可以将数字转换为字符串,并指定小数点后保留几位。如果小数实际位数不够指定的位数,不足的部分会补 0。所有主要浏览器都支持 toFixed() 方法。
toFixed() 使用的是银行家舍入规则:四舍六入五取偶(又称四舍六入五留双)。
2,自定义转换方法
(1)如果嫌 toFixed 这种四舍六入五取偶规则太奇葩。可以考虑自己实现个四舍五入的方法,下面方法转换后仍为数字类型。
第一个参数为待转换的数字
第二个参数为保留的小数个数
//保留n位小数
function roundFun(value, n) {
return Math.round(value*Math.pow(10,n))/Math.pow(10,n);
}
3,自定义输出方法
//保留n位小数并向上截取的
toChangeNum(num, fix) {
var f = Math.ceil(num * Math.pow(10, fix)) / Math.pow(10, fix);
var s = f.toString();
var rs = s.indexOf(".");
if (rs < 0) {
rs = s.length;
s += ".";
}
while (s.length <= rs + fix) {
s += "0";
}
return s;
},
使用实例
<span class="num">{{toChangeNum(1000/7.89,4)}}</span> //126.7428
保留n位小数输出(不足的部分补0)
reNum(value, num) {
let a = '', b, c, i;
if (!value) {
return '--'
}
a = value.toString();
b = a.indexOf(".");
c = a.length;
if (num == 0) {
if (b != -1) {
a = a.substring(0, b);
}
} else {//如果没有小数点
if (b == -1) {
a = a + ".";
for (i = 1; i <= num; i++) {
a = a + "0";
}
} else {//有小数点,超出位数自动截取,否则补0
a = a.substring(0, b + num + 1);
for (i = c; i <= b + num; i++) {
a = a + "0";
}
}
}
return a;
},