浮点数精度问题

有关浮点数的精度是一个老生常谈的问题了。

面试题中这个知识点出现的频率非常高:

0.1 + 0.2 === 0.3 // false

其中可以参阅 数字 章节。

这个问题很少会有面试官进一步的进行考察,如 “怎样让计算结果正确”,最常见的解决方案有两个:

  1. 计算过程中将数字转成整数计算
  2. 使用第三方库

第一个方案很好理解,将 0.1 与 0.2 扩大 10 倍,相加后再相除就得到了正确的结果:

((0.1 * 10) + (0.2 * 10)) / 10 === 0.3 // true

如果存在两位小数,则同时放大 100倍,计算后再缩小 100倍 就可以了。

第二个方案可以有很多选择,这里列出了几个常用的第三方库: