toFixed 四舍六入问题

都知道对一个数字进行toFixed(2)用的是银行家舍入规则
但是如果现在的场景是2个相加的数最多只有2位小数的情况,对结果用toFixed(2)是可以正确显示的

var a = 0.1
var b = 0.2
var c = a + b // 0.30000000000000004
c.toFxied(2) // 0.30

所以我在想能不能直接对结果用toFixed(2)来解决计算时候的各种问题?

阅读 3.1k
2 个回答

从理论上来说是不能的。

因为双精度浮点数总长就那么长,并不意味着只有小数位才有精度问题,在某些大数条件下整数位同样会有精度问题。

所以问题来了:整数位都已经有精度问题了,你保留两位小数又有什么用呢?

当然了,如果实际中你参与运算的数值都很小,你确实也可以选择这么做。


实际上这不单是 JS 一门语言的问题,绝大部分语言都会有浮点数运算精度问题,这也是为何很多语言都专门有一个库用来处理高精度浮点运算问题、而不是简简单单就保留指定位小数了。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题