Tout d'abord, signalez un problème : lors de la construction de BigDecimal, essayez de ne pas utiliser de nombres à virgule flottante (double, float), car il y a un manque de précision dans le stockage des nombres à virgule flottante dans l'ordinateur. Par exemple, le code que vous avez écrit :
public static void main(String[] args) throws Exception {
double a = 1.505;
BigDecimal bd = new BigDecimal(a);
System.out.println("bd: " + bd.toString());
}
Résultat de l'exécution :
Comme vous pouvez le constater, le nombre à virgule flottante 1,505 ne peut pas être stocké dans l'ordinateur - si vous ne connaissez pas la raison spécifique, veuillez la rechercher vous-même "Le problème de la précision manquante des nombres à virgule flottante"
Deuxièmement, si vous devez sortir 1,51, qui est souvent appelé « arrondi », alors vous devez spécifier le mode d'arrondi de DecimalFormat :
public static void main(String[] args) throws Exception {
BigDecimal bd = new BigDecimal("1.505");
System.out.println("bd: " + bd.toString());
DecimalFormat df = new DecimalFormat("#.00");
df.setRoundingMode(RoundingMode.HALF_UP);
System.out.println("format: " + df.format(bd));
}
Résultat de l'exécution :
Si vous ne comprenez pas l'utilisation de RoundingMode, veuillez rechercher "Utilisation du mode d'arrondi"
Troisièmement, concernant la signification des chaînes entre parenthèses DecimalFormat, veuillez rechercher "Utilisation de DecimalFormat"
Tout d'abord, signalez un problème : lors de la construction de
BigDecimal
, essayez de ne pas utiliser de nombres à virgule flottante (double
,float
), car il y a un manque de précision dans le stockage des nombres à virgule flottante dans l'ordinateur. Par exemple, le code que vous avez écrit :Résultat de l'exécution :
Comme vous pouvez le constater, le nombre à virgule flottante 1,505 ne peut pas être stocké dans l'ordinateur - si vous ne connaissez pas la raison spécifique, veuillez la rechercher vous-même "Le problème de la précision manquante des nombres à virgule flottante"
Deuxièmement, si vous devez sortir 1,51, qui est souvent appelé « arrondi », alors vous devez spécifier le mode d'arrondi de
DecimalFormat
:Résultat de l'exécution :
Si vous ne comprenez pas l'utilisation de
RoundingMode
, veuillez rechercher "Utilisation du mode d'arrondi"Troisièmement, concernant la signification des chaînes entre parenthèses
DecimalFormat
, veuillez rechercher "Utilisation de DecimalFormat"