小数点的玩法(保留小数点N位)

1,560 阅读2分钟

刚接手一个项目,老板要求先保留两位小数,后面加到四位小数,之后又说保留小数点四的同时的后面还有小数的都得向上加一。 这改来改去的谁受得了,老子不...(想了一下家里还有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;
},