Diskrepanz im java.text.DecimalFormat.format mit Muster „###0,00 %“Java

Java-Forum
Guest
 Diskrepanz im java.text.DecimalFormat.format mit Muster „###0,00 %“

Post by Guest »

Ich verwende das Muster ###0.00%, um Prozentwerte zu formatieren.
Aus der Dokumentation wird erwähnt, dass java.text.DecimalFormat die Rundung HALF_EVEN verwendet Modus.

Code: Select all

DecimalFormat df = new DecimalFormat("###0.00%");
List list = List.of(/*input list*/);
String result = list.stream().map(df::format).collect(Collectors.joining(", "));
System.out.print(result);
Als ich es mit der folgenden Eingabeliste versucht habe:

Code: Select all

0.012050, 0.012150, 0.012250, 0.012350, 0.012450, 0.012550, 0.012650, 0.012750, 0.012850, 0.012950
Die Ausgabe war:

Code: Select all

1.21%, 1.21%, 1.23%, 1.23%, 1.24%, 1.26%, 1.26%, 1.27%, 1.29%, 1.29%
Während ich es mit versucht habe:

Code: Select all

0.014050, 0.014150, 0.014250, 0.014350, 0.014450, 0.014550, 0.014650, 0.014750, 0.014850, 0.014950
Ich habe folgendes Ergebnis erhalten:

Code: Select all

1.41%, 1.42%, 1.43%, 1.44%, 1.44%, 1.46%, 1.47%, 1.47%, 1.49%, 1.49%
Es ist offensichtlich, dass die Art und Weise, wie beide Eingaben gerundet wurden, unterschiedlich ist. 0,012350 wird auf 1,23 % gerundet, während 0,014350 zu 1,44 % wird
Als ich die Formatierung ein wenig durchgetestet habe Logik konnte ich sehen, dass während der Binär-zu-ASCII-Konvertierung einige Rundungsfehler hinzugefügt wurden, was zu unerwarteten Problemen führte.
Beispiel: für 0,012250, 0,0000000000001 werden hinzugefügt, wodurch es auf 1,23 % gerundet wird.
Unten ist der Code von java.text.DigitList< /code> von dem aus die ASCII-Konvertierung erfolgt:

Code: Select all

FloatingDecimal.BinaryToASCIIConverter fdConverter  = FloatingDecimal.getBinaryToASCIIConverter(source);
boolean hasBeenRoundedUp = fdConverter.digitsRoundedUp();
Und in einigen Fällen wird hasBeenRoundedUp als wahr ausgegeben, wodurch jede weitere Rundung als Teil der Methode eingeschränkt wird.
Könnte mir bitte jemand helfen, zu verstehen, wie genau die Formatierung für das oben genannte Dezimalformat erfolgt?

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post