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四舍五入

js中的parseFloat()如果实部值大于14位,则将数字四舍五入[duplicate]

JS怎样做四舍五入

JS处理数据四舍五入,tofixed与round的区别

JS处理数据四舍五入(tofixed与round的区别详解)

JS处理数据四舍五入(tofixed与round的区别详解)