【JS】toFixed不精準問題的解決辦法
阿新 • • 發佈:2019-01-29
不經意之間發現我一直在用的toFixed方法竟然有問題,我竟然糊塗的用它做了很多事!以下是我在chrome上的結果:
console.log(1.35.toFixed(1)); // 1.4 正確 console.log(1.335.toFixed(2));//1.33 錯誤 console.log(1.3335.toFixed(3));//1.33 錯誤 console.log(1.33335.toFixed(4));//1.3334 正確 console.log(1.333335.toFixed(5));//1.33333 錯誤 console.log(1.3333335.toFixed(6));//1.333333 錯誤
果然有問題,只能尋找解決辦法了,那要怎麼解決呢?
解決方法有下面兩種:
方法一:(定義一個全域性方法,直接呼叫)
// num表示需要四捨五入的小數
// s表示需要保留幾位小數
function toFixed(num, s) {
var times = Math.pow(10, s);
var des = num * times + 0.5;
des = parseInt(des, 10) / times;
return des + '';
}
呼叫方法如下:
console.log(toFixed(0.335,2));//0.34
方法二:重寫toFixed方法:
Number.prototype.toFixed = function (s) {
var times = Math.pow(10, s);
var des = this * times + 0.5;
des = parseInt(des, 10) / times;
return des + '';
};
console.log(1.335.toFixed(2));//1.34