1. 程式人生 > >【JS】toFixed不精準問題的解決辦法

【JS】toFixed不精準問題的解決辦法

不經意之間發現我一直在用的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