原因:計算機對小數的存儲是二進制的,有限位數的二進制做算法得到的是有限位數,無限位數的二進制做運算,得到的是無限位數。
如下:0.5 和 0.25 轉二進制是有限位數,0.3 和 0.2 轉二進制是無限位數。
(0.5).toString(2); // 0.1(0.25).toString(2); // 0.010.5 - 0.25; // 0.1 - 0.01 = 0.01(0.3).toString(2); // '0.010011001100110011001100110011001100110011001100110011'(0.2).toString(2); // '0.001100110011001100110011001100110011001100110011001101'0.3 - 0.2; // 0.00891089108910891
解決:轉字符串,然后不同位置做算法。