Ich werde das Standardverhalten einführen, wenn der Dezimalpunkt mit java.text.NumberFormat
gerundet wird und wie das Standardverhalten geändert wird.
$ java -version
java version "1.8.0_121"
Java(TM) SE Runtime Environment (build 1.8.0_121-b13)
Java HotSpot(TM) 64-Bit Server VM (build 25.121-b13, mixed mode)
Sie können den Dezimalpunkt runden, indem Sie in der Methode "setMaximumFractionDigits" von "NumberFormat" "0" angeben.
package com.example;
import java.text.NumberFormat;
import org.junit.Test;
public class NumberFormatTests {
@Test
public void testForDefault() {
NumberFormat numberFormat = NumberFormat.getInstance();
numberFormat.setMaximumFractionDigits(0); //Setzen Sie die maximale Anzahl von Nachkommastellen auf 0
System.out.println(numberFormat.format(98.5));
System.out.println(numberFormat.format(99.5));
}
}
Wenn ich diesen Code ausführe ...
98
100
Wird sein. Oh? ?? ?? Vielleicht haben einige Leute das gedacht. Intuitiv ...
98
99
Oder
99
100
Ich hoffe, dass es ...
Und ... Dieses Verhalten wird von NumberFormat (RoundingMode) verwaltet (https://docs.oracle.com/javase/jp/8/docs/api/java/math/RoundingMode) Dies liegt daran, dass der Standardwert von .html) "HALF_EVEN" ist.
Beim JavaDoc von HALF_EVEN
handelt es sich um einen Rundungsmodus, der auf die" nächste Zahl "rundet (wenn jedoch die Zahlen auf beiden Seiten gleich weit entfernt sind, wird er auf die gerade Seite gerundet). Daher wurde "98,5" auf "98" (gerade) anstelle von "99" (ungerade) und "99,5" auf "100" (gerade) anstelle von "99" (ungerade) gerundet.
Der "RoundingMode" von "NumberFormat" kann mit der "setRoundingMode" -Methode geändert werden.
@Test
public void testForRoundingModeIsDown() {
NumberFormat numberFormat = NumberFormat.getInstance();
numberFormat.setMaximumFractionDigits(0);
numberFormat.setRoundingMode(RoundingMode.DOWN); //Rundungsmodus ändern
System.out.println(numberFormat.format(98.5));
System.out.println(numberFormat.format(99.5));
}
Wenn ich diesen Code ausführe ...
98
99
Wird sein.
Es fühlt sich an wie. Ich war mir der Tatsache nicht bewusst, dass das Standardverhalten "HALF_EVEN" ist, aber ich habe gelernt: heat_smile: Übrigens ... Ich habe diesen Eintrag geschrieben ... Thymeleaf Issue (gh- " 581). Wenn Sie Thymeleaf zum Runden verwenden, erhalten Sie möglicherweise unerwartete Ergebnisse (auf einen Blick gab es keine Möglichkeit, den "Rundungsmodus" zu ändern).
Recommended Posts