使用JS自带的toFixed(2)方法遇到的坑

四舍五入的不公平
四舍五入是一种精确度的计数保留法,常常用在省略小数点位数时,当所需省略的小数位是[01234]则直接省略,[56789]时进1再省略。
如果我们先精确的得到三位小数的数,需要保留两位小数,并且这个钱是我们付给别人的,简单的使用四舍五入的话,0至9的可能性都是1/10, 求权: (0.000+0.001+0.002+0.003+0.004-0.005-0.004-0.003-0.002-0.001)x0.1 = -0.0005 即我们实际每成交一笔就会亏损 0.0005。
实际情况可能我们无法得到精确的三位小数的,并且我们也无需求权,从数对称可知,每当有需保留m位的小数 0.mx被直接省略,就一定会有一个不同的数 1-0.mx 进1到第上一位后再省略x,除非这个x是5开头并且在它之后只有0,这时对称后是它自己,这也就是不公平所在。
银行家舍入
为了解决四舍五入的不公平,有人提出银行家传入,也就是四舍六入,五看情况。
所谓看情况,就是处理不公平的特殊所在,即被舍入如果是5并且5之后只有0时,此时看5上一位是偶直接舍去,为奇进1再舍去。比如:
13.1249999999 变 13.12
13.1250000001 变 13.13
13.1250000000 变 13.12
13.1350000000 变 13.14
toFixed函数
NumberObject.toFixed(num)
在JS中,对NumberObject进行“四舍五入”,num为保留的小数个数,默认不填为0,最后返回一个数字的字符串。
我们知道了四舍五入不公平,但我们偏偏就想用不公平的四舍五入可以用这个函数获取到偏偏想到的结果吗?
【使用JS自带的toFixed(2)方法遇到的坑】不能!
比如:

0.105.toFixed(2) === ‘0.10’ 0.115.toFixed(2) === ‘0.12’ 0.125.toFixed(2) === ‘0.13’ 0.135.toFixed(2) === ‘0.14’ 0.145.toFixed(2) === ‘0.14’ 0.155.toFixed(2) === ‘0.15’

推荐一个链接https://www.boatsky.com/blog/32

    推荐阅读