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

工做中遇到金額須要保留兩位小數的需求,單價1.265,數量爲1,正常來說金額應爲1.27,用了toFixd()方法後結果爲1.26。post

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

爲何會這樣?this

因爲1.265不是精確表示的,而1.26是能夠精確表示的,因此1.265就能夠獲得0.05存儲的值。能夠看到確實是比0.05小。spa

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

根本緣由在於1.265的存儲要比實際存儲小一點,致使0.05的第1位尾數不是1,因此就被舍掉了。源碼

解決方案:io

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 謝謝~
相關文章
相關標籤/搜索