Runden von Fließkommazahlen in Java

JavaBeginner
Jetzt üben

Einführung

Das Runden einer Zahl bedeutet, einen ungefähren Wert von ihr zu erhalten. In Java gibt es mehrere Möglichkeiten, eine Gleitkommazahl zu runden. In diesem Lab (Übungsumgebung) werden wir lernen, wie man Zahlen mit verschiedenen Methoden in Java rundet.

Runden mit der printf()-Methode

Wir können die System.out.printf()-Methode verwenden, um die gerundete Zahl auf der Konsole auszugeben. Wir können die Anzahl der Dezimalstellen, auf die wir runden möchten, mithilfe von Präzisionsmodifikatoren angeben.

public static void main(String args[]) {
  double pi = 3.14159265359;
  double oneThird = 1.0/3.0;
  float g = 9.807f;

  System.out.printf("Pi: %.2f %n", pi); // prints Pi: 3.14
  System.out.printf("One Third: %.3f %n", oneThird); // prints One Third: 0.333
  System.out.printf("Gravitation Acceleration(g): %.0f", g); // prints Gravitation Acceleration(g): 10
}

Um den Code auszuführen, öffnen Sie das Terminal und wechseln Sie in das Verzeichnis, in dem sich die Code-Datei befindet. Kompilieren Sie dann den Code mit javac filename.java. Führen Sie ihn anschließend mit java filename aus.

Runden mit der DecimalFormat()-Methode

Wir können die DecimalFormat-Klasse verwenden, um ein Muster anzugeben, in dem wir die Zahl formatieren möchten. Wir können Rautezeichen (#) verwenden, um die Anzahl der Dezimalstellen anzugeben, und dann die format()-Methode verwenden, um die Ziffern zu runden.

public static void main(String args[]) {
  double pi = 3.14159265359;
  double oneThird = 1.0/3.0;
  float g = 9.807f;

  DecimalFormat d1 = new DecimalFormat("#.##");
  DecimalFormat d2 = new DecimalFormat("#.###");
  DecimalFormat d3 = new DecimalFormat("#");

  System.out.println("Pi: " + d1.format(pi)); // prints Pi: 3.14
  System.out.println("One Third: " + d2.format(oneThird)); // prints One Third: 0.333
  System.out.println("Gravitation Acceleration(g):" + d3.format(g)); // prints Gravitation Acceleration(g): 10
}

Um den Code auszuführen, öffnen Sie das Terminal und wechseln Sie in das Verzeichnis, in dem sich die Code-Datei befindet. Kompilieren Sie dann den Code mit javac filename.java. Führen Sie ihn anschließend mit java filename aus.

Runden mit der Math.round()-Methode

Wir können Math.round() verwenden, um Dezimalzahlen zu runden. Diese Methode kann verwendet werden, wenn wir eine Zahl auf null Dezimalstellen runden möchten.

public static void main(String args[]) {
  double pi = 3.14159265359;
  double oneThird = 1.0/3.0;
  float g = 9.807f;

  System.out.println("Pi: " + Math.round(pi)); // prints Pi: 3
  System.out.println("One Third: " + Math.round(oneThird)); // prints One Third: 0
  System.out.println("Gravitation Acceleration(g):" + Math.round(g)); // prints Gravitation Acceleration(g): 10
}

Um den Code auszuführen, öffnen Sie das Terminal und wechseln Sie in das Verzeichnis, in dem sich die Code-Datei befindet. Kompilieren Sie dann den Code mit javac filename.java. Führen Sie ihn anschließend mit java filename aus.

Erstellen einer benutzerdefinierten Rundungsmethode

Wir können unsere eigene Methode erstellen, um eine Dezimalzahl zu runden, wenn wir auf mehr als null Dezimalstellen runden möchten. Die folgende Methode nimmt einen Dezimalwert und die Anzahl der Dezimalstellen, auf die gerundet werden soll, als Parameter und gibt die gerundete Zahl zurück.

public static double round(double num, int places) {
  double scale = Math.pow(10, places);
  double roundedNum = Math.round(num * scale) / scale;
  return roundedNum;
}

public static void main(String args[]) {
  double pi = 3.14159265359;
  double oneThird = 1.0/3.0;
  float g = 9.807f;

  System.out.println("Pi: " + round(pi, 2)); // prints Pi: 3.14
  System.out.println("One Third: " + round(oneThird, 3)); // prints One Third: 0.333
  System.out.println("Gravitation Acceleration(g):" + round(g, 0)); // prints Gravitation Acceleration(g): 10.0
}

Um den Code auszuführen, öffnen Sie das Terminal und wechseln Sie in das Verzeichnis, in dem sich die Code-Datei befindet. Kompilieren Sie dann den Code mit javac filename.java. Führen Sie ihn anschließend mit java filename aus.

Runden mit BigDecimal

Wir können die round()-Methode der BigDecimal-Klasse verwenden, um eine Zahl zu runden. Der folgende Code zeigt, wie man eine Dezimalzahl mit der round()-Methode der BigDecimal-Klasse rundet.

public static void main(String args[]) {
  BigDecimal pi = new BigDecimal("3.14159265359");
  pi = pi.setScale(4, RoundingMode.HALF_UP); // Rounds to 4 decimal places

  System.out.println("Pi: " + pi); // prints Pi: 3.1416
}

Um den Code auszuführen, öffnen Sie das Terminal und wechseln Sie in das Verzeichnis, in dem sich die Code-Datei befindet. Kompilieren Sie dann den Code mit javac filename.java. Führen Sie ihn anschließend mit java filename aus.

Runden beliebiger Nicht-BigDecimal-Zahlen mit BigDecimal

Wenn die Zahl nicht vom Typ BigDecimal ist, können wir sie zuerst konvertieren und dann mit der BigDecimal-Klasse runden. Die folgende Methode kann verwendet werden, um Zahlen vom double-Datentyp zu runden.

public static double round(double num, int places) {
  BigDecimal b = new BigDecimal(Double.toString(num));
  b = b.setScale(places, RoundingMode.HALF_UP);
  return b.doubleValue();
}

public static void main(String args[]) {
  double pi = 3.14159265359;
  double oneThird = 1.0/3.0;
  double g = 9.807f;

  pi = round(pi, 4);
  oneThird = round(oneThird, 3);
  g = round(g, 0);

  System.out.println("Pi: " +pi); // prints Pi: 3.1416
  System.out.println("One Third: " + oneThird); // prints One Third: 0.333
  System.out.println("Gravitation Acceleration(g):" + g); // prints Gravitation Acceleration(g): 10.0
}

Um den Code auszuführen, öffnen Sie das Terminal und wechseln Sie in das Verzeichnis, in dem sich die Code-Datei befindet. Kompilieren Sie dann den Code mit javac filename.java. Führen Sie ihn anschließend mit java filename aus.

Zusammenfassung

In diesem Lab haben wir verschiedene Methoden kennengelernt, um Dezimalzahlen in Java zu runden. Wir haben printf() und DecimalFormat() für einfachere Rundungen verwendet, Math.round() für das Runden auf null Dezimalstellen, BigDecimal für präzise Rundungen und DoubleRounder für das Runden mit der decimal4j-Bibliothek. Wir haben auch eine benutzerdefinierte Methode erstellt, um jede Dezimalzahl auf eine beliebige Anzahl von Dezimalstellen zu runden.