In JavaScript gehören sowohl Ganzzahlen als auch Gleitkommazahlen zum Datentyp „Zahl“ (einer der einfachen Datentypen). Wir stellen oft fest, dass das Ergebnis des Druckens einer Gleitkommazahl wie 1.0
ist ist 1
statt 1.0
. Dies liegt daran, dass der Speicherplatz zum Speichern von Gleitkommazahlen doppelt so groß ist wie zum Speichern von Ganzzahlwerten, sodass ECMAScript keine Zeit beim Konvertieren von Gleitkommazahlen in Ganzzahlen verliert.
Obwohl die obige Situation Patienten mit Zwangsstörungen ein wenig unangenehm macht, ist es trotzdem kein großer Fehler. Die nächste Situation wird sehr beängstigend sein. Wenn wir beispielsweise 0.1
plus 0.2
berechnen, ist das Ausgabeergebnis nicht 0.3
, sondern 0.3000000000000004
. Was zum Teufel? ! Haben Sie bei Kindern, die diese Situation zum ersten Mal erleben, das Gefühl, dass Ihre Weltanschauung in Frage gestellt wurde?
Also öffnete ich schnell das Buch, um meine Seele und meinen Körper zu retten, und stellte fest, dass im Buch klar geschrieben stand: ECMAScrip basiert auf der numerischen Gleitkommaberechnung nach IEEE754 Die Methode wandelt den numerischen Wert in einen binären Wert um und führt dann Berechnungen durch. Da Gleitkommazahlen in Binärform unendlich sind, treten bei der Durchführung arithmetischer Berechnungen Rundungsfehler auf. Berechnungen mit Gleitkommazahlen sind weitaus schlechter als Ganzzahlberechnungen und denken Sie schließlich daran, niemals den Wert einer bestimmten Gleitkommazahl zu testen .
LösungDie sogenannten Verschreiben Sie das richtige Medikament. Sobald Sie die Ursache des Problems kennen, können Sie die Lösung für das Problem finden. Da es sich um einen Fehler handelt, der dadurch verursacht wird, dass das Binärsystem der Gleitkommazahlen unendlich ist, tritt dieser Fehler bei Ganzzahloperationen nicht auf. Sind Sie klug genug, die Wahrheit zu erkennen? Das ist richtig, das heißt, in der arithmetischen Technik werden Gleitkommazahlen in Ganzzahlen umgewandelt und die Ergebnisse werden dann in Gleitkommazahlen umgewandelt. Gastoffizier, das Folgende ist der neue Code~1 //加法 2 function FloatAdd(arg1,arg2){ 3 var r1,r2,m; 4 try{r1=arg1.toString().split(".")[1].length}catch(e){r1=0; //参数1为整数}; //参数1小数点后的位数5 try{r2=arg2.toString().split(".")[1].length}catch(e){r2=0; //参数2为整数}; //参数2小数点后的位数6 m=Math.pow(10,Math.max(r1,r2)); //取其中较大的位数7 return (arg1*m+arg2*m)/m; //先将arg1和arg2转换为整数进行计算,然后再转换回浮点数8 }
Die Original-URL ist dem obigen Nachdruck beigefügt
toFixed()-Methode sollte auch in der Lage sein, einen Teil des Rundungsfehlerproblems auf narrensichere Weise zu lösen.
Syntax: number.toFixed(x) x: Gibt die Anzahl der Dezimalstellen an, das ist ein Wert zwischen 0 und 20, einschließlich 0 und 20. Einige Implementierungen können einen größeren Zahlenbereich unterstützen. Wenn dieser Parameter weggelassen wird, wird stattdessen 0 verwendet.Das obige ist der detaillierte Inhalt vonEntdecken Sie die Gründe, warum JavaScript-Gleitkommawertoperationen Rundungsfehler verursachen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!