個人はJavaScriptの中でNumber.toFixed()方法の理解について
1922 ワード
需要:浮動小数点を四捨五入精度で取得します.
問題:
理由:コンピュータ浮動小数点保存はバイナリで、
具体的な原理はここで詳しく説明しません.皆さんは自分で関連資料を調べられます.
解決方法:再
実現原理:浮動小数点を整数に変換し、必要な桁数を残して浮動小数点にする.
実現コード:
問題:
Number.toFixed()
を直接使用すると異常な丸め込みが発生します.理由:コンピュータ浮動小数点保存はバイナリで、
js
のNumber.toFixed()
の実際的な精度確認規則は四捨六入五成で、四捨五入に会うと、六入一に会うと、五になると、ブラウザ内核計算結果によっても異なります.具体的な原理はここで詳しく説明しません.皆さんは自分で関連資料を調べられます.
解決方法:再
Number.toFixed()
方法.実現原理:浮動小数点を整数に変換し、必要な桁数を残して浮動小数点にする.
実現コード:
Number.prototype.toFixed = function (length) {
var s = this + '';
var len = length || 0;
var result = s;
var arr = s.split('.');
//
if (arr.length < 2) {
if (len > 0) {
result += '.';
for (var i = 1; i <= len; i++) {
result += '0';
}
}
return result;
}
//
var first = arr[0];
var second = arr[1];
// length
if (second.length == len) {
return result;
}
// length
if (second.length < len) {
for (var k = 1; k <= len - second.length; k++) {
result += '0';
}
return result;
}
// length
result = first + second.substr(0, len + 1);
var last = Math.floor((result * 1 + 5) / 10);
result = (last / Math.pow(10, len)).toFixed(len);
return result;
};
備考:解決案はいろいろありますが、これは個人的な理解です.ご参考ください.