Javascript での toFixed 丸めの例

黄舟
黄舟オリジナル
2017-08-22 11:16:571249ブラウズ

この記事では主に 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 += &#39;.&#39;;
        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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。