toFixed() 和 Math.round()

嫌长不看版:

//输入num数值和要保留n位小数,返回四舍五入的值
function round(num, n) {
  return Math.round(num * Math.pow(10, n)) / Math.pow(10, n);
}

前端在计算订单数据的时候发现用toFixed好像并不准确:
toFixed(n)
代表保留n位小数,会自动进行位数保留,一直以为是按照四舍五入进行计算,实践后并查阅资料和得知并不是,他按照的是银行家舍入法。
默认按照四舍六入五取偶。具体为:
四舍六入五考虑,五后非零就进一,五后为零看奇偶,五前为偶应舍去,五前为奇要进一
看例子:

// 5前是小数点时按四舍五入
1.5.toFixed(0) // 2
2.5.toFixed(0) // 3

// 此时就 五前为偶应舍去,五前为奇要进一
1.55.toFixed(1) // 1.6
1.65.toFixed(1) // 1.6
1.75.toFixed(1) // 1.8

Math.round()
默认四舍五入取整

Math.round(1.50) // 2
Math.round(1.49) // 1

向上取整
Math.ceil(1.2) // 2

向下取整
Math.floor(1.2) // 1

所以正确的标准的四舍五入函数不能再使用toFixed了

//输入num数值和要保留n位小数,返回四舍五入的值
function round(num, n) {
  return Math.round(num * Math.pow(10, n)) / Math.pow(10, n);
}

综上,如果是百分比,那么四舍五入的转换的做法为:

var percent = 0.5678;
var percentString = round(percent*100, 2) + '%'; //得到56.78%

就是先运算,最后去保留小数。不能先保留小数再*100

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

友情链接更多精彩内容