Fließkommazahlen mit Java runden: Unterschied zwischen den Versionen

Aus Byte-Welt Wiki
Zur Navigation springenZur Suche springen
K
(Weiterleitung nach Gleitkommazahlen mit Java runden erstellt)
(Markierung: Neue Weiterleitung)
 
(10 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 1: Zeile 1:
=Math.round()=
+
#WEITERLEITUNG [[Gleitkommazahlen mit Java runden]]
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">
 
  /**
 
  * Rundet den übergebenen Wert auf die Anzahl der übergebenen Nachkommastellen
 
  *
 
  * @param value ist der zu rundende Wert.
 
  * @param decimalPoints ist die Anzahl der Nachkommastellen, auf die gerundet werden soll.
 
  */
 
  private double round(double value, int decimalPoints) {
 
      double d = Math.pow(10, decimalPoints);
 
      return Math.round(value * d) / d;
 
  }
 
</syntaxhighlight>
 
  
Der Aufruf der Methode in einer [[Klasse]] zum Runden einer Zahl auf zwei Nachkommastellen sieht dann z.B. so aus:
+
[[Kategorie:Java]]
<syntaxhighlight lang="java">
 
  System.out.println(round(1234.565, 2);
 
</syntaxhighlight>
 
 
 
=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'''.
 
 
 
<syntaxhighlight lang="java">
 
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));
 
  }
 
}
 
</syntaxhighlight>
 
Möchte man bspw. das englische oder französische Zahlenformat ausgeben, muss noch ein passendes {{JAPI|Locale}} als erster Parameter der format()-[[Methode]] übergeben werden.
 
String.format(Locale.FRENCH, "%1.2f", number)
 
Ansonsten wird das von der [[JRE]] erkannte Locale des [[Betriebssystem|Betriebssystems]] verwendet.
 
 
 
=NumberFormat=
 
Auch relativ einfach ist das Runden von Dezimalzahlen mit [[NumberFormat]].
 
 
 
<syntaxhighlight lang="java">
 
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));
 
  }
 
}
 
</syntaxhighlight>
 
 
 
Mit Hilfe der Methode <code>NumberFormat#setMaximumFractionDigits(int value)</code> 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 {{JAPI|Locale}} als Parameter der <code>getInstance()</code>-[[Methode]] übergeben werden.
 
NumberFormat formatter = NumberFormat.getInstance(Locale.FRENCH);
 
Ansonsten wird das von der [[JRE]] erkannte Locale des [[Betriebssystem|Betriebssystems]] verwendet.
 
 
 
=DecimalFormat=
 
Noch eine einfache Variante für das Runden von Fließkommazahlen mit Java - mit [[DecimalFormat]].
 
 
 
{{JAPI|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.
 
 
 
<syntaxhighlight lang="java">
 
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));
 
  }
 
}
 
</syntaxhighlight>
 
 
 
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 $).
 
 
 
{{Fragen stellen}}
 
 
 
=Siehe auch=
 
*{{JAPI|NumberFormat}}
 
*{{JAPI|DecimalFormat}}
 
*[[String]]
 
*{{JAPI|String}}
 
 
 
[[Kategorie:Java-Codeschnipsel]]
 

Aktuelle Version vom 7. November 2021, 16:44 Uhr