Alle Originalinhalte werden auf Ukrainisch erstellt. Noch nicht alle Inhalte wurden übersetzt. Einige Beiträge sind möglicherweise nur auf Ukrainisch verfügbar.Mehr erfahren

Rundung von Dezimalzahlen: mathematische Regeln, JavaScript und Ruby

Beitrags-Cover: Rundung von Dezimalzahlen: mathematische Regeln, JavaScript und Ruby
InhaltsverzeichnisKlicke auf den Link, um zur gewünschten Stelle zu navigieren
Dieser Inhalt wurde automatisch aus dem Ukrainischen übersetzt.
Rundung ist eine wichtige Operation bei der Arbeit mit Dezimalzahlen, da sie es ermöglicht, Werte in einer handlicheren Form darzustellen, indem die Anzahl der Ziffern nach dem Komma reduziert wird. Verschiedene Programmiersprachen können jedoch unterschiedliche Ansätze zur Rundung verwenden, was in bestimmten Szenarien unerwartete Ergebnisse hervorrufen kann. In diesem Beitrag werden wir die mathematischen Regeln der Rundung und deren Implementierung in JavaScript und Ruby betrachten.

Mathematische Rundung

Mathematische Rundung ist der Prozess, die Anzahl der Dezimalstellen einer Zahl zu reduzieren, um sie einfacher zu verwenden, darzustellen oder weiter zu berechnen. Dies ist besonders wichtig in finanziellen, wissenschaftlichen und ingenieurtechnischen Berechnungen, wo Genauigkeit mit Praktikabilität in Einklang gebracht werden muss.
Rundung auf die nächste Zahl
Diese Methode rundet eine Zahl auf die nächste ganze oder Dezimalzahl. Wenn die Zahl genau in der Mitte zwischen zwei Optionen liegt (z. B. 2.5), wird sie auf die größere Zahl gerundet.
Regel: Wenn der Bruchteil ≥ 0.5, runden wir auf. Wenn weniger — runden wir ab.
Beispiel:
2.4 → 2
2.5 → 3
Rundung ab
Bei Verwendung dieser Methode werden alle Werte in die kleinere Richtung gerundet, unabhängig vom Bruchteil der Zahl.
Regel: Die Zahl wird immer auf die kleinere ganze Zahl gerundet.
Beispiel:
2.9 → 2
-2.1 → -3
Rundung auf
Es wird in die größere Richtung gerundet, unabhängig vom Bruchteil der Zahl.
Regel: Die Zahl wird immer auf die nächste ganze Zahl aufgerundet.
Beispiel:
2.1 → 3
-2.9 → -2
Abschneiden des Dezimalteils
Diese Methode schneidet einfach den Bruchteil ab und lässt nur die ganze Zahl übrig.
Regel: Der Bruchteil der Zahl wird ignoriert.
Beispiel:
3.9 → 3
-3.9 → -3
Wir haben das Schulprogramm wiederholt und können zu Javascript und Ruby übergehen. Lassen Sie uns die bestehenden Methoden, Nuancen und Fallstricke jeder dieser Programmiersprachen betrachten. Ich betrachte genau diese Sprachen, da dies mein Hauptarbeitsstapel ist.

Rundung in JavaScript

In JavaScript erfolgt die Rundung über die Methoden Math.round(), Math.floor() und Math.ceil():
Beispiele:
  • Math.round(4.73) → 5
  • Math.round(4.76) → 5
  • Math.floor(4.76) → 4 (Rundung ab)
  • Math.ceil(4.76) → 5 (Rundung auf)
Aber zuerst betrachten wir die Methoden toFixed() und toPrecision().
Rundung auf eine bestimmte Anzahl von Dezimalstellen (JS)
In JavaScript wird zur Rundung einer Zahl auf eine bestimmte Anzahl von Dezimalstellen am häufigsten die Methode toFixed() und toPrecision() verwendet.
Die Methode toFixed() ermöglicht es, eine Zahl auf die angegebene Anzahl von Dezimalstellen zu runden und gibt das Ergebnis als Zeichenfolge zurück.
num.toFixed(digits);
num: Die zu rundende Zahl.
digits: Die Anzahl der Dezimalstellen.
let num = 5.6789;
console.log(num.toFixed(2)); // "5.68"
Im Beispiel wurde die Zahl 5.6789 auf zwei Dezimalstellen gerundet, das Ergebnis — "5.68". Die Methode gibt immer eine Zeichenfolge zurück, daher kann sie bei Bedarf mit parseFloat() oder Number() in eine Zahl umgewandelt werden.
Die Methode toPrecision() ermöglicht es, eine Zahl mit einer angegebenen Gesamtanzahl von Ziffern (einschließlich der Ziffern vor und nach dem Komma) zu runden.
num.toPrecision(precision);
precision: Die Anzahl der Ziffern.
let num = 5.6789;
console.log(num.toPrecision(3)); // "5.68"
Hier wurde die Zahl 5.6789 auf drei Ziffern gerundet, das Ergebnis — "5.68".
Zusammenfassend und im Vergleich dieser Methoden:
  • toFixed() fixiert die Anzahl der Dezimalstellen.
  • toPrecision() arbeitet mit allen Ziffern der Zahl, einschließlich der ganzen und der Bruchzahlen.
Die Rundungsmethoden toFixed() und toPrecision() verwenden allgemeine mathematische Rundungsregeln — arithmetische Rundung. Das bedeutet, dass sie eine Zahl je nach Wert der nächsten Ziffer nach der Rundungsgrenze auf oder ab runden.
Rundungsregeln:
  1. Wenn die Ziffer nach der Rundungsgrenze kleiner als 5 ist, wird die Zahl abgerundet (in die kleinere Richtung).
  2. Wenn die Ziffer nach der Rundungsgrenze gleich oder größer als 5 ist, wird die Zahl aufgerundet (in die größere Richtung).
Beispiele .toFixed() mit .5
Die Zahl 2.5 wird auf 3 aufgerundet, da die Ziffer nach dem Komma 5 beträgt.
let num = 2.5; 
console.log(num.toFixed(0)); // "3"
Wenn wir auf eine Dezimalstelle runden, wird die Zahl 2.45 zu 2.5, da die Ziffer nach der Rundungsgrenze (4) nicht 5 erreicht.
let num = 2.45;
console.log(num.toFixed(1)); // "2.5"
Beispiele .toPrecision() mit .5
Bei der Rundung auf zwei signifikante Ziffern wird die Zahl 1.005 zu 1.0, da die Rundungsgrenze auf 0 steht und die nächste Ziffer kleiner als 5 ist.
let num = 1.005;
console.log(num.toPrecision(2)); // "1.0"
Die Zahl 2.555 wird auf drei signifikante Ziffern gerundet, und wir erhalten 2.56, da nach der Rundungsgrenze die Ziffer 5 steht.
let num = 2.555;
console.log(num.toPrecision(3)); // "2.56"
Besonderheiten von JS
JavaScript rundet Fließkommazahlen, und manchmal kann es zu ungenauer Rundung aufgrund der Darstellung von Zahlen im Binärsystem kommen. Zum Beispiel:
let num = 1.005;
console.log(num.toFixed(2)); // "1.00" (erwartet "1.01")
Hier wurde erwartet, dass 1.005 zu 1.01 wird, aber aufgrund der binären Arithmetik kann das Ergebnis etwas anders sein. Um mit diesen Problemen umzugehen, werden oft Methoden wie Multiplikation der Zahl mit 10^n vor der Rundung oder die Verwendung spezialisierter Bibliotheken für genaue Berechnungen angewendet. Es gibt verschiedene Ansätze zur Lösung dieses Problems:
let num = 1.005;
let rounded = Math.round(num * 100) / 100;
console.log(rounded); // "1.01"
Nun sind wir bei der praktischen Anwendung der Methoden von Math angekommen. Um die Rundungsmethoden in JavaScript, insbesondere die, die zur Math-Bibliothek gehören, besser zu verstehen, lassen Sie uns die wichtigsten von ihnen betrachten und Beispiele für ihre Verwendung anführen.
Math.round()
Die Methode rundet eine Zahl auf die nächste ganze Zahl. Wenn der Bruchteil der Zahl größer oder gleich 0.5 ist — rundet sie in die größere Richtung, andernfalls — in die kleinere.
Math.round(4.7); // 5
Math.round(4.3); // 4
Math.round(4.5); // 5 (wenn .5, dann in die größere Richtung)
Math.round(-1.5); // -1 (negative .5 werden ebenfalls in die größere Richtung gerundet)
Math.floor()
Diese Methode rundet die Zahl immer ab (auf die nächste kleinere ganze Zahl).
Math.floor(4.9); // 4
Math.floor(4.1); // 4
Math.floor(-2.3); // -3 (negative Zahlen werden ebenfalls in die kleinere Richtung gerundet)
Math.ceil()
Diese Methode rundet die Zahl immer auf (auf die nächste größere ganze Zahl).
Math.ceil(4.1); // 5
Math.ceil(4.9); // 5
Math.ceil(-2.3); // -2 (negative Zahlen werden in die größere Richtung gerundet)
Math.trunc()
Diese Methode schneidet den Bruchteil der Zahl ab und gibt nur den ganzzahligen Teil zurück, unabhängig davon, ob der Bruchteil positiv oder negativ ist.
Math.trunc(4.9); // 4
Math.trunc(-4.9); // -4
Math.trunc(4.1); // 4
Und zur Bequemlichkeit ein kleines Cheatsheet in Form eines Bildes:
cheatsheet - округлення в Javascript
cheatsheet - округлення в Javascript
Jetzt betrachten wir die Rundungsmethoden in Ruby. 

Rundung in Ruby

Ruby hat, wie JavaScript, mehrere Methoden zur Rundung von Zahlen. Die Hauptmethoden umfassen round, floor, ceil und truncate. Lassen Sie uns jede von ihnen im Detail betrachten.
.round
Die Methode round rundet eine Zahl auf die nächste ganze Zahl oder auf die angegebene Anzahl von Dezimalstellen. Wenn der Bruchteil der Zahl 0.5 oder mehr beträgt, wird die Zahl in die größere Richtung gerundet. Wenn weniger, dann in die kleinere Richtung.
2.5.round # => 3
2.49.round # => 2
Die Rundung auf eine bestimmte Anzahl von Dezimalstellen erfolgt durch Übergeben eines zusätzlichen Parameters:
2.456.round(2)  # => 2.46
.floor
Die Methode floor rundet eine Zahl auf die nächste ganze Zahl ab, unabhängig vom Wert des Bruchteils. Sie ist ähnlich der Methode Math.floor in JavaScript.
2.9.floor    # => 2
-2.1.floor   # => -3
.ceil
Die Methode ceil hingegen rundet eine Zahl auf die nächste ganze Zahl auf, unabhängig vom Bruchteil. Sie ist das Pendant zur Methode Math.ceil in JavaScript.
2.1.ceil     # => 3
-2.9.ceil    # => -2
.truncate
Die Methode truncate schneidet den Bruchteil der Zahl ab und gibt nur den ganzzahligen Teil zurück. Sie ist ähnlich der Methode Math.trunc in JavaScript.
2.9.truncate   # => 2
-2.9.truncate  # => -2
Rundung auf eine bestimmte Anzahl von Dezimalstellen (Ruby)
Wenn Sie eine Zahl auf eine bestimmte Anzahl von Dezimalstellen runden müssen, erlaubt Ruby dies ebenfalls mit der Methode round. Der Parameter in Klammern gibt an, wie viele Stellen nach dem Komma bleiben sollen.
5.6789.round(2)   # => 5.68
5.6789.round(3)   # => 5.679
Wie in JavaScript kann auch die Rundung in Ruby zu unerwarteten Ergebnissen führen, wenn Fließkommazahlen verwendet werden. Zum Beispiel in älteren Versionen von Ruby (2.+):
(1.005).round(2)  # => 1.0 (erwartet 1.01)
Derzeit habe ich Ruby 3.2.1 (2023-02-08 Revision 31819e82c8) +YJIT [x86_64-darwin23] und sehe dieses Problem nicht:
(1.005).round(2)
=> 1.01
Diese Nuancen bei der Rundung können häufig während technischer Interviews angesprochen werden. Daher ist es wichtig, sie zu verstehen und zu merken (und auf Updates zu achten). Wir wollen nicht, dass ein triviales Rundungsfehler uns in der Produktionsumgebung Probleme bereitet.
cheatsheet - округлення в Ruby
cheatsheet - округлення в Ruby

Dieser Beitrag hat noch keine Ergänzungen vom Autor.

Welche Hierarchie hat das DOM (Document Object Model)?
23. Aug, 09:22 Uhr

Welche Hierarchie hat das DOM (Document Object Model)?

meme code
meme code@memecode
Wie funktioniert das Modell der künstlichen Intelligenz?
15. Sep, 16:42 Uhr

Wie funktioniert das Modell der künstlichen Intelligenz?

meme code
meme code@memecode
Was bedeutet relational (im Kontext von relationalen Datenbanken)?
21. Sep, 08:27 Uhr

Was bedeutet relational (im Kontext von relationalen Datenbanken)?

meme code
meme code@memecode
Was ist ein RDBMS (relationales Datenbankmanagementsystem)?
21. Sep, 08:56 Uhr

Was ist ein RDBMS (relationales Datenbankmanagementsystem)?

meme code
meme code@memecode
Was bedeutet das ACID-Prinzip in der Programmierung?
24. Sep, 20:31 Uhr

Was bedeutet das ACID-Prinzip in der Programmierung?

meme code
meme code@memecode
Was ist Convention over Configuration (im Kontext von RoR und nicht nur)?
26. Sep, 07:47 Uhr

Was ist Convention over Configuration (im Kontext von RoR und nicht nur)?

meme code
meme code@memecode
[Fix] Fabrik nicht registriert: "user" (KeyError) (FactoryBot / Rails 7)
07. Dez, 10:46 Uhr

[Fix] Fabrik nicht registriert: "user" (KeyError) (FactoryBot / Rails 7)

meme code
meme code@memecode
Was ist PORO in Ruby?
08. Dez, 12:46 Uhr

Was ist PORO in Ruby?

meme code
meme code@memecode
Was ist der Unterschied zwischen spec_helper.rb und rails_helper.rb in RSpec?
08. Dez, 13:53 Uhr

Was ist der Unterschied zwischen spec_helper.rb und rails_helper.rb in RSpec?

meme code
meme code@memecode
09. Dez, 14:50 Uhr

[Fix] Keine solche Datei oder Verzeichnis @ rb_sysopen - tmp/pids/server.pid

meme code
meme code@memecode
Was man wissen muss, um eine erfolgreiche Karriere als Freelancer im IT-Bereich aufzubauen
23. Dez, 16:03 Uhr

Was man wissen muss, um eine erfolgreiche Karriere als Freelancer im IT-Bereich aufzubauen

meme code
meme code@memecode
Virtueller Cloud-Server: Was ist das und was sind seine Besonderheiten
03. Jan, 10:58 Uhr

Virtueller Cloud-Server: Was ist das und was sind seine Besonderheiten

meme code
meme code@memecode