Zum Inhalt springen

RundungsProblem bei Decimal Format


ObiWanBelix

Empfohlene Beiträge

Hallo,

ich habe ein Problem(oder ich verstehs nur nicht) mit der rundung von float Werten

Beispiel1

 import java.text.*;


 public class FloatToStringPerPattern

 {

   public static void print(float value, String format)

   {

     DecimalFormat df = new DecimalFormat(format);

     System.out.println(df.format(value));

   }

   public static void main(String[] args)

   {

     float value = 200.050f;

     print(value, "####.#");


   }

 }
Hier wird der Wert 200,1 ausgegeben, was soweit ich weiß ganz normales kaufmännisches runden ist(ab 5 wird aufgerundet) Beispiel2
 import java.text.*;


 public class FloatToStringPerPattern

 {

   public static void print(float value, String format)

   {

     DecimalFormat df = new DecimalFormat(format);

     System.out.println(df.format(value));

   }

   public static void main(String[] args)

   {

     float value = 200.50f;

     print(value, "####");


   }

 }

Hier bekomme ich die Ausgabe 200 !!:confused:

Es kommt mir vor , also ob hier nicht über den DecimalPunkt hinaus gerundet wird. denn wenn ich wie in Beispiel 1 noch eine Decimalstelle tiefer ansetzte funktioniert es auch.

Kann mir das jemand erklären?

Wie gehe ich dann mit Preisen um?

Dies ist auch bei Typ=double

ObiWanBelix

Link zu diesem Kommentar
Auf anderen Seiten teilen

Auch auf die Gefahr hin, mich zu blamieren ;) Warum sollte es den Wert 200.5 nicht geben? Daß es 200.50 vielleicht nicht gibt, ist ja verständlich, aber 200.5 sollte doch möglich sein.

Und ohne mir die Java-API angesehen zu haben: Daß einmal gerundet wird, ein anderes Mal nicht, ist schon seltsam ...

Link zu diesem Kommentar
Auf anderen Seiten teilen

DecimalFormat rundet nicht kaufmännisch, sondern nach dem "half even"-Prinzip. Das steht auch in der Dokumentation.

Dabei wird zur nächsten zum Format passenden Zahl gerundet. Wenn aber die Zahl genau zwischen zwei ins Format passenden Zahlen liegt (wie in diesem Fall), wird zum geraden Wert hin gerundet. Das ist in diesem Fall 200 (denn 201 ist ungerade).

Jaraz bezog sich vermutlich auf die Tatsache, dass sich nicht jede Zahl exakt als Fließkommawert darstellen lässt.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Gleitkommazahl - Wikipedia

Dezimalzahlen

Schon einfache Dezimalzahlen, z. B. 0,1, können nicht mehr exakt als binäre Gleitkommazahlen dargestellt werden, da viele im Dezimalsystem abbrechende Kommazahlen im Binärsystem nicht abbrechende, periodische Zahlen sind; von diesen werden nur die ersten p Ziffern gespeichert, wodurch Ungenauigkeit entsteht. Dezimal 0,1 ist binär 0,0001100110011… In einem binären Gleitkommasystem ist also 10 · 0,1 < 1, da die 0,1 abgerundet wird und nicht den exakten Wert approximiert.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...