Fließkommazahlen mit Java runden: Unterschied zwischen den Versionen
K (→Math.round()) |
K (→Math.round()) |
||
Zeile 1: | Zeile 1: | ||
=Math.round()= | =Math.round()= | ||
− | Die Klasse {{JAPI|java.lang.Math}} bietet eine Methode zum Runden von Fließkommazahlen an. Mit dieser können wir recht einfach eine eigene Methode schreiben, die uns Dezimalzahlen auf eine beliebige Anzahl Nachkommastellen rundet Es wird allerdings immer nur die letzte Kommastelle beachtet. | + | Die Klasse {{JAPI|java.lang.Math}} bietet eine [[Methode]] zum Runden von Fließkommazahlen an. Mit dieser können wir recht einfach eine eigene Methode schreiben, die uns Dezimalzahlen auf eine beliebige Anzahl Nachkommastellen rundet Es wird allerdings immer nur die letzte Kommastelle beachtet. |
<syntaxhighlight lang="java"> | <syntaxhighlight lang="java"> | ||
/** | /** | ||
* Rundet den übergebenen Wert auf die Anzahl der übergebenen Nachkommastellen | * Rundet den übergebenen Wert auf die Anzahl der übergebenen Nachkommastellen | ||
− | * @param value ist der zu | + | * |
+ | * @param value ist der zu rundende Wert. | ||
* @param decimalPlace ist die Anzahl der Nachkommastellen, auf die gerundet werden soll. | * @param decimalPlace ist die Anzahl der Nachkommastellen, auf die gerundet werden soll. | ||
*/ | */ | ||
Zeile 13: | Zeile 14: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | Der Aufruf der Methode in einer Klasse zum Runden einer Zahl auf zwei Nachkommastellen sieht dann z.B. so aus: | + | Der Aufruf der Methode in einer [[Klasse]] zum Runden einer Zahl auf zwei Nachkommastellen sieht dann z.B. so aus: |
<syntaxhighlight lang="java"> | <syntaxhighlight lang="java"> | ||
System.out.println(round(1234.565, 2); | System.out.println(round(1234.565, 2); |
Version vom 27. Juni 2018, 16:19 Uhr
Inhaltsverzeichnis
Math.round()
Die Klasse java.lang.Math
bietet eine Methode zum Runden von Fließkommazahlen an. Mit dieser können wir recht einfach eine eigene Methode schreiben, die uns Dezimalzahlen auf eine beliebige Anzahl Nachkommastellen rundet Es wird allerdings immer nur die letzte Kommastelle beachtet.
/**
* Rundet den übergebenen Wert auf die Anzahl der übergebenen Nachkommastellen
*
* @param value ist der zu rundende Wert.
* @param decimalPlace ist die Anzahl der Nachkommastellen, auf die gerundet werden soll.
*/
private double round(double value, int decimalPlace) {
double d = Math.pow(10, decimalPlace);
return Math.round(value * d) / d;
}
Der Aufruf der Methode in einer Klasse zum Runden einer Zahl auf zwei Nachkommastellen sieht dann z.B. so aus:
System.out.println(round(1234.565, 2);
String#format()
In Programmen müssen Ergebnisse von Berechnungen oft für eine Ausgabe passend formatiert werden. Dazu gehört auch das Runden, bspw. von Euro-Beträgen.
import java.util.Locale;
public class Formatter {
public static void main(String[] args) {
double number = 1234.565;
System.out.println(number+" gerundet: "+String.format("%1.2f", number));
}
}
Möchte man bspw. das englische oder französische Zahlenformat ausgeben, muss noch ein passendes Locale
als erster Parameter der format()-Methode übergeben werden.
Ansonsten wird das von der JRE erkannte Locale des Betriebssystems verwendet.
NumberFormat
Auch relativ einfach ist das Runden von Dezuimalzahlen mit NumberFormat.
import java.text.NumberFormat;
public class Formatter {
public static void main(String[] args) {
double number = 1234.565;
NumberFormat formatter = NumberFormat.getInstance();
formatter.setMaximumFractionDigits(2);
System.out.println(number+" gerundet: "+formatter.format(number));
}
}
Mit Hilfe der Methode NumberFormat#setMaximumFractionDigits(int value)
auf eine festgelegte Anzahl an Nachkommastellen begrenzen. Dabei wird auch eine Rundung der Zahl vorgenommen.
Möchte man bspw. das englische oder französische Zahlenformat ausgeben, muss noch ein passendes Locale
als Parameter der getInstance()
-Methode übergeben werden.
Ansonsten wird das von der JRE erkannte Locale des Betriebssystems verwendet.
DecimalFormat
Noch eine einfache Variante für das Runden von Fließkommazahlen mit Java - mit DecimalFormat.
DecimalFormat
ist eine Subklasse von NumberFormat für die Formatierung von Dezimalzahlen. Als Unterklasse von NumberFormat stehen auch hier Formatierungen von Dezimalzahlen in Abhängigkeit des Gebietsschemas zur Verfügung.
import java.text.DecimalFormat;
public class Formatter {
public static void main(String[] args) {
double number = 1234.565;
DecimalFormat formatter = new DecimalFormat("#.##");
System.out.println(number+" gerundet: "+formatter.format(number));
}
}
DecimalFormat unterstützt verschiedene lokalisierbare Zahlen-Typen, so auch Ganzzahlen (123), Festkommazahlen (123,4), wissenschaftliche Notation (1,23E4), Prozentangaben (12%) und Währungsbeträge (123 $).