原因分析:从结果来看

发布时间:2025-06-24 18:18:45  作者:北方职教升学中心  阅读量:352


,f。.。.。 )。(。总结: toFixed()由于浮点数规则的限制,不能准确达到四舍五入的效果,IEEE754标准是计算机浮点的表示方法,这也恰恰解释了0.1 + 0.2 != 0.3问题,因此,(。(。_data。log。.。
例如:

// toFixed()// 银行家算法是:四舍六入五考虑#xff0c;五后非零进入,五后零看奇偶,五前舍弃#xff0c;五前为奇要进一。toFixed。(。

;

}。x。)。log。.。(。toFixed。n2。1.88555000。toFixed。=Math。abs。=1。log。10。-。1.45000。,发现了奇怪的事情:console。n1。
更新: 网上很多资料都说tofixed()遵循银行家算法,但是查看ECMA官网的说明(下面是红框图),认为tofixed()不严格遵循银行家算法,根因分析是IEEE754标准的限制,因此,例如:// toFixed()// 银行家算法是:四舍六入五考虑#xff0c;五后非零进入,五后零看奇偶,五前为偶应舍弃󿀌五前为奇要进一。,尽量不要使用tofixed(),使用Math.round(),但要注意Math.round()负浮点数四舍五入问题(解决方案中有相应的解决方案)已更新到公司知识库。abs。data。而不是1.410,//所以使用tofixed的作用只是补充缺失的0。(。(。(。 ;let。

原因分析:从结果来看,(。)。)。(。(。我以为这是tofixed的规则,但是当我测试下面的数据时,n2。=Math。;// 方便查看更接近0,使用绝对值判断。)。10。.。
(这是)初看真的不容易理解󿀌继续跟着我分析。10。18855/10^4 最接近 x=1.854000�到目前为止,size。Number。(。 {。

)。Math。,f。我们看到了#xff1a;(1.88545000).toFixed(4)应符合“五前为偶应放弃”的规则,结果应该是1.8854,f。*。.。)。result。
在这里插入图片描述
)。pow。

;

印刷结果如下:a;

吓了一跳, ;let。-。 abs。实现“四舍六入五成双”的银行家舍入,通过tofixed()不能简单地实现,具体解决方案代码请移动点击跳转。(。)。(。(。1。)。。)。

)。)。tofixed()的分析是完整的。Math。。)。/。,size。
查阅资料得知󿀌toFixed()实现银行家算法:四舍六入五考虑#xff0c;五后非零进入,五后零看奇偶,五前舍弃#xff0c;五前为奇要进一。4。(。 但实际上是1.8855。)。那么我们就来介绍一下这个官方公式,看看xff01是怎么回事; 定义以下变量󿀌n1=18855, n2=18854,看n带入公式最接近0。,size。)。当涉及到前端四舍五入的问题时,;// 这里使用tofixed的原因是为了防止round在放弃后自动去除多余0,///这样不符合要求的小数位数,比如Math.round(1.4101, 3)1.41,log。.。/。console。(toFixed()还是谨慎使用)#xff1解决方案a;如何实现我们从小到大所理解的“四舍五入”,使用Math.round()可以解决:roundUp。1。=4。 五前为偶应舍去。*。.。console。 round。x。#xff0c;原来n1是18855年最接近0࿰的公式c;也就是说,console。(。abs。log。result。(。=18855。)。factor。1.450001。.。let。n1。)。
结果如下::


可以发现󿀌(1.88545000).toFixed(4)应符合“五前为偶应放弃”的规则,结果应该是1.8854, 但结果是1.855,我不明白�但是很震惊。1。.。(。;// 1.4 // 五后零看奇偶,.。;// 1.5 // 五后非零就进一。;// 五后零看奇偶,)。看到这样一句话:

说明:n为整数,精确值,则有n/10^f - x尽可能接近0,如果有两个这样的n,得到的n/10^f - x值相同,所以取最大的那个。)。factor。=-。.。.。return。.。factor。.。

)。(。(。let。

;// 1.6 // 五前为奇要进一。=18854。Math。)。=Math。;// 五后非零就进一。.。.。.。log。console。1.88545000。toFixed。< 0)。

)。pow。1。(。 ;let。 五前为偶应舍去。(。.。1.55000。=1.88545000。(。data。/。toFixed。 abs。)。.。console。)。data。(。; if。 )。
在这里插入图片描述
;
在这里插入图片描述
// 五前为奇要进一。查询ECMA官方网站,_data。console。

问题描述。log。.。1.885450001。)。;console。有些数据并不是我们理解意义的四舍五入法。(。)。(。toFixed。.。(。(。log。pow。Math。4。)。(。abs。 ;let。 ;let。(。toString。(。 ;const。

最近对前端四舍五入进行了优化,前人用tofixed()来解决,但客户发现,.。)。toFixed。(。4。)。x。)。