Sym - 一个用 Java 实现的现代化社区平台 • 源码注册

Pipe - 小而美的开源博客平台 • 体验皮肤
Solo - 一个用 Java 实现的博客系统,为你或你的团队创建个博客吧! • 源码下载
Wide - 一个基于 Web 的 Go 语言 IDE • 教程试用

`0.1 + 0.2 === 0.3` 的计算结果是什么?

2019-01-17

回答

他的计算结果为 false,因为 JavaScript 中的 Math 遵循 IEEE 754 标准使用了 64 位的浮点数。简言之:计算机使用二进制来存储小数,而大部分小数转换成二进制后都是无限循环的值,因此需要进行取舍,这样一来在进行十进制计算时就会导致精度丢失。

0.1 + 0.2 // 0.30000000000000004

要解决精度问题,可以通过以下函数对误差进行忽略:

const approxEqual = (n1, n2, epsilon = 0.0001) => Math.abs(n1 - n2) < epsilon
approxEqual(0.1 + 0.2, 0.3) // true 

加分回答

  • 对于范围内的浮点数计算可以先转换为整数后再进行计算,如:
    const add = (num1, num2) => {
      const num1Digits = (num1.toString().split('.')[1] || '').length;
      const num2Digits = (num2.toString().split('.')[1] || '').length;
      const baseNum = Math.pow(10, Math.max(num1Digits, num2Digits));
      return (num1 * baseNum + num2 * baseNum) / baseNum;
    }
  • 可以使用 number-precisionmathjs 库来完成计算

返回总目录

每天 30 秒


欢迎注册黑客派社区,开启你的博客之旅。让学习和分享成为一种习惯!

留下你的脚步