遇到的難題之一 —— js方法toFixd()


工作中遇到金額需要保留兩位小數的需求,單價1.265,數量為1,正常來講金額應為1.27,用了toFixd()方法后結果為1.26。

最終找到問題所在:1.265 - 1.26 = 0.004999999999999893;

為什么會這樣?

由於1.265不是精確表示的,而1.26是可以精確表示的,所以1.265就可以得到0.05存儲的值。可以看到確實是比0.05小。

按照源碼的判斷,如果剩下的尾數第1位不是1就不進位,由於剩下的尾數第1位是0,所以不進位,因此就導致了(1.265).toFixed(2)輸入結果是1.26

根本原因在於1.265的存儲要比實際存儲小一點,導致0.05的第1位尾數不是1,所以就被舍掉了。

解決方案:

if (!Number.prototype._toFixed) {
   Number.prototype._toFixed = Number.prototype.toFixed;
}
Number.prototype.toFixed = function(n) {
   return (this + 1e-14)._toFixed(n);
};
之后就正常了 
我只是答案的搬運工,查看完整答案請移步 https://juejin.im/post/5a11a9fef265da43284073b4 謝謝~


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM