toFixed()方法重寫

2021-08-17 20:38:39 字數 975 閱讀 8393

在js計算中,四捨五入保留小數的時候經常用到tofixed()方法,但是該方法存在著**的bug,就是在數字比較小的情況下,四捨五入會丟失精度。因此就需要重寫tofixed()方法。本人在網路上搜尋了2中比較有效的方法,供大家借鑑。若有更好的方法也希望大家給出指導。

1.自定義方法

tofixed2 : function(number, decimal) 

return s + '.' + fraction;

}var numdigits = s.length - 1 - decimalindex;

if (numdigits <= decimal)

return s + fraction;

}var digits = s.split('');

var pos = decimalindex + decimal;

var rounddigit = digits[pos + 1];

if (rounddigit > 4)

digits[pos] = number(digits[pos] || 0) + 1;

//迴圈進製

while (digits[pos] == 10)

digits[pos] = number(digits[pos] || 0) + 1;}}

//避免包含末尾的.符號

if (decimal == 0)

return digits.slice(0, decimalindex + decimal + 1).join('');

},

2.重寫number物件的方法:先放大倍數(10的數量級),然後再縮小倍數(10的數量級)

number.prototype.tofixed = function(s)
當然該方法也可以這麼寫

tofixed2: function(n,s),

對系統的toFixed 方法的修正

if typeof number.prototype.tofixed function d test s else break s a.join replace new regexp d d d 1.2 if b s s.substr 1 return pm s replace return thi...

JS精度損失toFixed

很明顯字尾00001跟預期想要的不一致,起初面臨這個問題我的處理方式是這樣的 1234 0.01 tostring substring 0,2 1234 0.01 tostring substring 2,4 這樣子雖然可行,但是當接收的引數1234是其他長度的話又得做一堆判斷,格外不方便。後來問了...

方法過載,方法重寫

方法過載 前提 必須在同一類中!才能過載 特點 這幾個方法要在乙個類中 這幾個方法名字要一樣 這幾個方法引數項不同 引數型別不同 主要就是 引數列表不能相同 順序可以不同 方法的重寫 前提是繼承關係 訪問修飾符要比繼承之前的大,返回值型別相同,方法名相同,引數列表相同,但方法體不同,稱為方法的重寫 ...