この記事では主に Javascript の toFixed 丸めメソッドを紹介します。編集者はこれが非常に優れていると考えたので、参考として共有します。エディターをフォローして見てみましょう
JavaScript の toFixed では、銀行家の丸め規則が使用されています。
バンカーズ四捨五入: いわゆるバンカーズ四捨五入法は、本質的には偶数四捨五入 (五等分四捨五入とも呼ばれます) 法です。
簡単に言うと、5に四捨五入することを検討してください。5の後の数値がゼロでない場合は、1を追加します。5の後の数値がゼロの場合は、奇数か偶数かを調べ、5の前の数値が偶数の場合は、破棄され、5 より前の数値が奇数の場合は 1 で丸められます。ただし、浮動小数点計算の精度不足の問題を解決するために toFixed を導入するのか、バンカーの丸め手法を使用するのか、いずれも精度の問題を解決するためであり、バイナリ浮動小数点環境とは切り離せないものですが、少なくとも私たちにとっては役に立ちます。問題が見つかり、解決策が得られました。
Number.prototype.toFixed = function(length) { var carry = 0; //存放进位标志 var num,multiple; //num为原浮点数放大multiple倍后的数,multiple为10的length次方 var str = this + ''; //将调用该方法的数字转为字符串 var dot = str.indexOf("."); //找到小数点的位置 if(str.substr(dot+length+1,1)>=5) carry=1; //找到要进行舍入的数的位置,手动判断是否大于等于5,满足条件进位标志置为1 multiple = Math.pow(10,length); //设置浮点数要扩大的倍数 num = Math.floor(this * multiple) + carry; //去掉舍入位后的所有数,然后加上我们的手动进位数 var result = num/multiple + ''; //将进位后的整数再缩小为原浮点数 /* * 处理进位后无小数 */ dot = result.indexOf("."); if(dot < 0){ result += '.'; dot = result.indexOf("."); } /* * 处理多次进位 */ var len = result.length - (dot+1); if(len < length){ for(var i = 0; i < length - len; i++){ result += 0; } } return result; }
このメソッドの一般的な考え方は、まず丸めビットを見つけ、その位置が 5 以上であるかどうかを判断し、条件が満たされる場合は手動で 1 桁実行し、その後パラメーターを使用することです。 size を使用して元の浮動小数点数を 10 パラメータの指数倍に増幅し、その後、floor を使用して丸めビットを含むすべての桁を削除し、以前の手動キャリーに基づいてキャリーするかどうかを決定します。
以上がJavascript での toFixed 丸めの例の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。