JavaScript的toFixed()方法的坑总结
本文由 小茗同学 发表于 2021-07-02 浏览(1253)
最后修改 2022-08-22 标签:javascript tofixed

网上几乎所有文章都是错的

网上有2类文章:

  • 一类是toFixed科普文章,像W3CSchool直接说toFixed是按照四舍五入,这属于完全错误的,甚至MDN都完全没有提到如何舍入;
  • 还有一类是介绍toFixed的坑的文章,这类文章一般都有部分错误,网上绝大部分文章都指出,toFixed是按照银行家舍入法来执行的,实际测试并非如此。

所谓银行家舍入法:四舍六入五看情况,五后非零直接入,五后为零看奇偶,五前为偶应舍去,五前为奇要进一,具体一点就是:

  • <=4舍去尾数,>=6进1;
  • 尾数为5时,如果5后面还有非0数字,也是进1,比如1.33500001.toFixed(2)返回1.34
  • 如果5后面没有数字或者全是0,那么看5前面的数字是奇数还是偶数,奇数进1,偶数舍去;

划重点:经笔者实际测试发现,最后一条浏览器并没有遵守,实际规律暂时还没有摸清楚,看起来似乎完全无规律可言,甚至不同浏览器返回结果还不一样,比如1.335.toFixed(2) Chrome返回1.33,IE11返回1.34,这篇文章介绍了一些测试兼容情况:https://www.cnblogs.com/wangsaiming/p/4644790.html

解决方案

https://github.com/camsong/blog/issues/9