Heim  >  Artikel  >  Web-Frontend  >  Beispiel für toFixed-Rundung in Javascript

Beispiel für toFixed-Rundung in Javascript

黄舟
黄舟Original
2017-08-22 11:16:571200Durchsuche

In diesem Artikel wird hauptsächlich die toFixed-Rundungsmethode in Javascript vorgestellt. Der Herausgeber findet sie recht gut, daher werde ich sie jetzt mit Ihnen teilen und als Referenz verwenden. Folgen wir dem Editor und werfen wir einen Blick darauf.

ToFixed in JavaScript verwendet die Banker-Rundungsregel.

Banker-Rundung: Die sogenannte Banker-Rundungsmethode ist im Wesentlichen eine Round-off-even-even-Methode (auch bekannt als Round-off-Five-Leave-Even).

Um es einfach auszudrücken: Wenn die Zahl nach fünf nicht Null ist, addieren Sie eins. Wenn die Zahl nach fünf Null ist, schauen Sie nach, ob die Zahl vor fünf gerade ist , sollte es verworfen werden. Wenn die Zahl vor fünf ungerade ist, fügen Sie eins hinzu. Unabhängig davon, ob toFixed eingeführt wird, um das Problem der mangelnden Präzision bei Gleitkommaberechnungen zu lösen, oder ob die Rundungsmethode des Bankers verwendet wird, dient alles dazu, das Problem der Präzision zu lösen, kann jedoch nicht auf die binäre Gleitkommaumgebung verzichten Zumindest hilft es uns. Wir haben das Problem gefunden und daraus eine Lösung gefunden.


 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;
    }

Die allgemeine Idee dieser Methode besteht darin, zuerst das Rundungsbit zu finden, zu bestimmen, ob die Position größer oder gleich 5 ist, und eine Ziffer manuell zu runden Wenn die Bedingung wahr ist, verwenden Sie dann die Parametergröße, um die ursprüngliche Gleitkommazahl um den Parameter exponentiell mal 10 zu verstärken. Anschließend werden alle Ziffern einschließlich des Rundungsbits unter Verwendung des Bodens entfernt, und auf dieser Grundlage wird bestimmt, ob ein Übertrag durchgeführt werden soll auf unserem vorherigen manuellen Carry.

Das obige ist der detaillierte Inhalt vonBeispiel für toFixed-Rundung in Javascript. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn