而toFixed()
在chrome、火狐上也并不是网上所说的用银行家舍入法来进行四舍五入的。
银行家舍入法的规则是“四舍六入五考虑,五后非零就进一,五后为零看奇偶,五前为偶应舍去,五前为奇要进一”。
例如银行家舍入法在 (2.55).toFixed(1) = 2.5
、(3.55).toFixed(1) = 3.5
上就不符合了。
那为什么会这样呢,要从toFixed的定义说起,来看ecmascript 规范对toFixed的表述:
按上图中的步骤来演示一下(2.55).toFixed(1) = 2.5
的处理过程。
x为2.55,小于 ,f为1,要使 准确的数学值尽可能接近零,取n为25和n为26,
可以看到最接近零的应该是 -0.04999… ,故n为25,那么m为25,k为2, 为1,故a为2,则b为5,所以(2.55).toFixed(1)的结果为2.5。可以看出(2.55).toFixed(1)
的结果是2.5
而不是2.6
,是 … 引起,而 为什么不等于0.5,其原因和 不等0.3是