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);
Code: Select all
0.012050, 0.012150, 0.012250, 0.012350, 0.012450, 0.012550, 0.012650, 0.012750, 0.012850, 0.012950
Code: Select all
1.21%, 1.21%, 1.23%, 1.23%, 1.24%, 1.26%, 1.26%, 1.27%, 1.29%, 1.29%
Code: Select all
0.014050, 0.014150, 0.014250, 0.014350, 0.014450, 0.014550, 0.014650, 0.014750, 0.014850, 0.014950
Code: Select all
1.41%, 1.42%, 1.43%, 1.44%, 1.44%, 1.46%, 1.47%, 1.47%, 1.49%, 1.49%
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();
Könnte mir bitte jemand helfen, zu verstehen, wie genau die Formatierung für das oben genannte Dezimalformat erfolgt?