JS 中的四舍五入
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JS 中的四舍五入相关的知识,希望对你有一定的参考价值。
参考技术A原文地址: https://alphahinex.github.io/2022/03/20/javascript-rounding-off/
description: "通过最小的浮点数或科学记数法减少误差"
date: 2022.03.20 10:34
categories:
- JavaScript
tags: [JavaScript]
keywords: js, 四舍五入, toFixed, Number.EPSILON
由于 JS 中 Number 对象的 toFixed 方法在对某些值进行四舍五入计算时 存在误差 ,而这种误差在进行货币金额计算时是不能接受的,那么在 JS 中我们应该如何正确的进行四舍五入呢?
以保留两位小数为例,选取几种典型的方法,其中 n 为要进行四舍五入运算的浮点数。
为 n 添加一个小的偏移量,再进行四舍五入:
保留两位小数时,先将 n 扩大 10^2 倍,然后通过 Math.round 获得最接近的整数,缩小 10^2 倍后再进行四舍五入:
为 n 添加一个小的偏移量后,再进行方法 B 中的操作:
通过科学记数法进行方法 B 的操作:
可以看到,每种方法都有计算结果与预期不符的情况,但方法 D 仅在 n 只能使用科学计数法进行表示时才会出现与预期不符( NaN )的情况。
当 n 为负数时,直接使用上面的四个方法均得不到正确的结果,因为上面的方法主要是采用增加偏移量和 Math.round 来进行计算的。
n 为正数时,增加偏移量,n 为负数时,应该减少偏移量;
Math.round 在小数部分为 0.5 时,会取下一个最接近正无穷的最小整数:
如果 n 为负数,可先取绝对值后用上述方法进行四舍五入,之后再将结果转换为负数。
总体来说,方法 D 的适用性最好,可以用来作为在 JS 中进行四舍五入运算的主要方式。
JS怎样做四舍五入
1 、tofixed方法
toFixed() 方法可把 Number 四舍五入为指定小数位数的数字。例如将数据Num保留2位小数,则表示为:toFixed(Num);但是其四舍五入的规则与数学中的规则不同,使用的是银行家舍入规则,银行家舍入:所谓银行家舍入法,其实质是一种四舍六入五取偶(又称四舍六入五留双)法。具体规则如下:
简单来说就是:四舍六入五考虑,五后非零就进一,五后为零看奇偶,五前为偶应舍去,五前为奇要进一。
显然这种规则不符合我们平常在数据中处理的方式。为了解决这样的问题,可以自定义去使用Math.round方法进行自定义式 的实现指定保留多少位数据进行处理。
2 、 round方法
round() 方法可把一个数字舍入为最接近的整数。例如:Math.round(x),则是将x取其最接近的整数。其取舍的方法使用的是四舍五入中的方法,符合数学中取舍的规则。对于小数的处理没有那么便捷,但是可以根据不同的要求,进行自定义的处理。
例如:对于X进行保留两位小数的处理,则可以使用 Math.round(X * 100) / 100 进行处理。
小拓展: 我们可以用 Math.max() / Math.min() 判断多个值的最大最小值
利用 ES6 新语法将一个数组解构
例如 Math.max(number, ...[array])
Math.max(2, ...[2, 3, 11, 24, 1, 66]) 返回值为 66
Math.min 的操作也是相同的。
以上是关于JS 中的四舍五入的主要内容,如果未能解决你的问题,请参考以下文章
js中的parseFloat()如果实部值大于14位,则将数字四舍五入[duplicate]