开发中有时我们需要对小数进行取整,或者只保留 N 位小数进行显示。下面分别对这两种情况进行说明。这里假设我们有如下数字进行处理:var
num = 5/3;
console.log(num);
输出如下:
1 | var num = parseInt(5/3); // 1 |
1 | var num = Math.round(5/3); // 2 |
1 | var num = Math.ceil(5/3); // 2 |
1 | var num = Math.floor(5/3); // 1 |
(1)方法介绍
银行家舍入法:
四舍六入五考虑,五后非零就进一,五后为零看奇偶,五前为偶应舍去,五前为奇要进一。
(2)使用样例
1 2 3 4 | var num1 = (5/3).toFixed(2); // 1.67 var num2 = (4).toFixed(2); // 4.00 var num3 = (0.015).toFixed(2); // 0.01 var num4 = (0.025).toFixed(2); // 0.03 |
(1)如果嫌 toFixed 这种四舍六入五取偶规则太奇葩。可以考虑自己实现个四舍五入的方法,下面方法转换后仍为数字类型。
1 2 3 4 | //保留n位小数 function roundFun(value, n) { return Math.round(value*Math.pow(10,n))/Math.pow(10,n); } |
(2)使用样例
1 2 3 4 | var num1 = roundFun(5/3, 2); // 1.67 var num2 = roundFun(4, 2); // 4 var num3 = roundFun(0.015, 2); // 0.02 var num4 = roundFun(0.025, 2); // 0.03 |
(1)下面方法同样是指定小数位数进行四舍五入,不过返回的不再是数字而是格式化后的字符串,小数点后面不足的位数会自动补 0。比如数字为 4,会在 4 后面补上 00,变成 4.00 返回。
1 2 3 4 5 6 7 8 9 10 11 12 13 | //保留n位小数并格式化输出(不足的部分补0) var fomatFloat = function (value, n) { var f = Math.round(value*Math.pow(10,n))/Math.pow(10,n); var s = f.toString(); var rs = s.indexOf( ‘.‘ ); if (rs < 0) { s += ‘.‘ ; } for ( var i = s.length - s.indexOf( ‘.‘ ); i <= n; i++){ s += "0" ; } return s; } |
(2)使用样例
1 2 3 4 | var num1 = fomatFloat(5/3, 2); // 1.67 var num2 = fomatFloat(4, 2); // 4.00 var num3 = fomatFloat(0.015, 2); // 0.02 var num4 = fomatFloat(0.025, 2); // 0.03 |
原文出自:www.hangge.com 转载请保留原文链接:https://www.hangge.com/blog/cache/detail_1791.html