首页 理论教育解决JavaScript浮点数误差

解决JavaScript浮点数误差

【摘要】:JavaScript采用IEEE二进制浮点数算术标准表示浮点数,导致某些浮点数计算会出现误差。图5.5.2浮点数误差表达式0.1 + 0.2出乎意料地不等于0.3,这是因为64个比特位无法存储完整的无限循环小数。凡是采用IEEE 754 Floating-point浮点数编码方案的语言都有这个问题,并不是JavaScript独有。开发者可以使用JavaScript库math.js解决浮点数计算的精度问题,该函数库功能强大且稳定。

JavaScript采用IEEE二进制浮点数算术标准(简称IEEE 754标准)表示浮点数,导致某些浮点数计算会出现误差。

5.5.2.html使用浮点数进行加法和乘法运算,如下所示。

动手写5.5.2

执行5.5.2.html,输出运算结果到网页,如下图所示。

(www.chuimin.cn)

图5.5.2 浮点数误差

表达式0.1 + 0.2出乎意料地不等于0.3,这是因为64个比特位(bit)无法存储完整的无限循环小数。当然,绝大部分浮点数计算仍是可信的。

凡是采用IEEE 754 Floating-point浮点数编码方案的语言都有这个问题,并不是JavaScript独有。比如,在Java中使用“System.out.println(.1 + .2);”输出的是0.30000000000000004,使用“System.out.println(.1F + .2F);”才能正常输出0.3。0.1 + 0.2这个问题非常有名,为此有人专门建立了一个兴趣网站http://0.30000000000000004.com/,该网站罗列了在处理0.1 + 0.2和使用浮点数形式表示0.3时会出现精度问题的语言。

JavaScript没有原生提供解决方案来解决这个问题,其他采用该标准的语言虽然也会出现此问题,但有的语言原生提供了解决方案。开发者可以使用JavaScript库math.js解决浮点数计算的精度问题,该函数库功能强大且稳定。