J'introduirai le comportement par défaut lors de l'arrondi de la virgule décimale en utilisant java.text.NumberFormat
et comment changer le comportement par défaut.
$ 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)
Vous pouvez arrondir la virgule décimale en spécifiant «0» dans la méthode «setMaximumFractionDigits» de «NumberFormat».
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); //Définissez le nombre maximum de chiffres de la virgule décimale sur 0
System.out.println(numberFormat.format(98.5));
System.out.println(numberFormat.format(99.5));
}
}
Quand j'exécute ce code ...
98
100
Sera. Oh? ?? ?? Peut-être que certaines personnes ont pensé cela. Intuitivement ...
98
99
Ou
99
100
J'espère que ce sera ...
Et ... Ce comportement est géré par NumberFormat
[ RoundingMode
](https://docs.oracle.com/javase/jp/8/docs/api/java/math/RoundingMode En effet, la valeur par défaut de .html) est «HALF_EVEN».
En regardant le JavaDoc de HALF_EVEN
, c'est un mode d'arrondi qui arrondit au" nombre le plus proche "(cependant, si les nombres des deux côtés sont des distances égales, il arrondit au côté pair). Par conséquent, «98,5» a été arrondi à «98» (pair) au lieu de «99» (impair), et «99,5» a été arrondi à «100» (pair) au lieu de «99» (impair).
Le RoundingMode
de NumberFormat
peut être modifié avec la méthode setRoundingMode
.
@Test
public void testForRoundingModeIsDown() {
NumberFormat numberFormat = NumberFormat.getInstance();
numberFormat.setMaximumFractionDigits(0);
numberFormat.setRoundingMode(RoundingMode.DOWN); //Changer le mode d'arrondi
System.out.println(numberFormat.format(98.5));
System.out.println(numberFormat.format(99.5));
}
Quand j'exécute ce code ...
98
99
Sera.
C'est comme ressentir. Je n'étais pas au courant du fait que le comportement par défaut est HALF_EVEN
, mais j'ai appris: sweat_smile: Au fait ... j'ai écrit cette entrée ... Thymeleaf Issue (gh-" 581). Si vous utilisez Thymeleaf pour arrondir, vous pouvez obtenir des résultats inattendus (en un coup d'œil, il n'y avait aucun moyen de changer le RoundingMode
).
Recommended Posts