原因
0.1 + 0.2 != 0.3
因为在计算的时, 会发生两次精度丢失,所以0.1 + 0.2 != 0.3
- 第一次:两者转为双精度二进制浮点数,由于它只能存储52位,超出舍0进1
- 第二次:相加后,小数点多出一位,舍0进1
解决方案
- Math.js、BigDecimal.js三方库
- 转为整数相加
-
function 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 }