调整字号

JavaScript 浮点运算的误差问题

JavaScript 中,有浮点数值参与运算的时候,经常会产生误差。比如你测试 0.1 + 0.2 == 0.3,会得到 false。这是因为 JavaScript 采用了 IEEE 754 标准定义的格式来存储数字,采用了这种格式的编程语言都会存在这个问题,并不是 JavaScript 特有。

比如计算 0.1 + 0.2,你其实会得到 0.30000000000000004。所以在 JavaScript 中有浮点数参与运算时,应该尽量避免 0.1 + 0.2 == 0.3 这样的测试。

要解决这个问题,一种方法就是利用 toFixedtoFixed 是 Number 类型的一个原型方法,可以用字符串表示数字,同时指定小数位数。传入的参数可以是 0 到 20 间的整数,表示小数部分的长度。

(0.1).toFixed(4); // "0.1000"

toFixed 方法会自动进行四舍五入以符合指定的小数位数,因此正好可以用来解决浮点运算的误差问题。首先对数值调用 toFixed 方法,限制小数部分长度,比如 10,此时误差基本已经修正,然后再用 parseFloat 方法或加号操作符转换回数字。示例:

(0.1 + 0.2).toFixed(10); // "0.3000000000"
parseFloat((0.1 + 0.2).toFixed(10)); // 得到 0.3
+((0.1 + 0.2).toFixed(10)); // 功能同上
+((0.1 + 0.2).toFixed(10)) == 0.3 // 返回 true
还没有评论,沙发空缺中……
flight