0
多くの場合toFixed()
javascriptの数学で浮動小数点の失敗原因があります。javascript toFixed()
function toFixed(decimalPlaces) {
var factor = Math.pow(10, decimalPlaces || 0);
var v = (Math.round(Math.round(this * factor * 100)/100)/factor).toString();
if (v.indexOf('.') >= 0) {
return v + factor.toString().substr(v.length - v.indexOf('.'));
}
return v + '.' + factor.toString().substr(1);
}
と、この:
が、私はこの解決策を見つけfunction toFixed(num, fixed) {
var re = new RegExp('^-?\\d+(?:\.\\d{0,' + (fixed || -1) + '})?');
return num.toString().match(re)[0];
}
他のアプローチがありますが?私はどんな場合でもうまくいくことが確実でなければならない。また、境界線の場合も。
EDIT: https://github.com/MikeMcl/decimal.js @Tschallacka
Number.prototype.toFixed = function(fixed) {
x = new Decimal(Number(this));
return x.toFixed(fixed);
};
それは便利です、ありがとう!しかし、私は "生産中"のソフトウェアを実装しなければなりません。私が持っているより良い方法は、toFixed関数を上書きすることです – Andreah
toFixedラッパーで10進実装をラップしないのはなぜですか?あなたはtoFixedであなたが望むものを何でもすることができます。これらの機能にどのような種類のデータを提供しているかについての情報を提供できますか?文字列、整数、浮動小数点? – Tschallacka
が浮かびます。私は価格形式(10.325は10.33でなければならない)でこれらの数字を約束する必要があります – Andreah