JavaScript 浮点数神坑当属 0.1 + 0.2 == 0.3
为 false。
> 0.1 + 0.2 == 0.3 false > 0.1 + 0.2 0.30000000000000004 >
还有一些比较隐蔽的问题,比如 Math.round、Number.prototype.toFixed 也都不是能完全正常工作的。
> Math.round(1.105 * 100) 111 > Math.round(1.015 * 100) 101 > Math.round(1.025 * 100) 102 > 0.25.toFixed(1) '0.3' > 0.35.toFixed(1) '0.3'
Math.round、toFixed 计算出错主要因为浮点数不能精确表示。
在这里 0.35 和 1.015 的值都不准确,一个办法是转换成整数计算再除以对应的十百千;另一个办法是采用现有的 lib,比如 accounting。
> 1.015 * 100 101.49999999999999
代码运行环境
D:\node -v v8.1.0