L'exemple de cet article décrit la méthode de fonctionnement de BigDecimal en Java. Partagez-le avec tout le monde pour votre référence. L’analyse spécifique est la suivante :
Puisque double et float ne sont pas assez précis, BigDecimal doit être utilisé lors de l'exécution de calculs commerciaux. L'objet BigDecimal est créé comme suit :
Copiez le code comme suit : BigDecimal b = new BigDecimal("12.000001");
System.out.println(b);
Le résultat de sortie est : 12.000001 ;
BigDecimal peut être passé dans String et double lors de sa création, mais il est préférable d'utiliser String Pour la raison, regardez simplement le code suivant :
Copiez le code comme suit : BigDecimal b = new BigDecimal("12.000001");
System.out.println(b);
BigDecimal c = nouveau BigDecimal(12.01);
System.out.println(c);
Le résultat courant est :
12.000001
12.00999999999999997868371792719699442386627197265625
On peut voir que la précision sera perdue lorsque le double sera transmis.
Les autres opérations de BigDecimal sont les suivantes :
Copiez le code Le code est le suivant : //Ajout.
public static BigDecimal add (String num1, String num2) {
BigDecimal bd1 = nouveau BigDecimal(num1);
BigDecimal bd2 = nouveau BigDecimal(num2);
retourner bd1.add(bd2);
}
//Soustraction
public static BigDecimal soustraire (String num1, String num2) {
BigDecimal bd1 = nouveau BigDecimal(num1);
BigDecimal bd2 = nouveau BigDecimal(num2);
retourner bd1.subtract(bd2);
}
//multiplication
public static BigDecimal multiplier (String num1, String num2) {
BigDecimal bd1 = nouveau BigDecimal(num1);
BigDecimal bd2 = nouveau BigDecimal(num2);
return bd1.multiply(bd2);
}
//division
public static BigDecimal Divide(String num1, String num2, int i) {
BigDecimal bd1 = nouveau BigDecimal(num1);
BigDecimal bd2 = nouveau BigDecimal(num2);
// i est le nombre de chiffres à retenir, BigDecimal.ROUND_HALF_UP représente la règle d'arrondi
return bd1.divide(bd2, i, BigDecimal.ROUND_HALF_DOWN);
}
Il faut souligner la division. Le troisième paramètre est de savoir s'il faut arrondir.
ROUND_HALF_DOWN signifie que 1 ne sera pas saisi lorsque 5 est rencontré, c'est-à-dire 1,5->1 ;
ROUND_HALF_UP signifie que lorsque 5 est rencontré, 1 est entré, c'est-à-dire 1,5->2 ;
Mais il y a certaines choses à noter :
Lorsque nous utilisons ROUND_HALF_DOWN, copiez le code comme suit : System.out.println(this.divide("67.75", "5",4));
System.out.println(this.divide("67.75", "5",1));
System.out.println("-------");
System.out.println(this.divide("67.751", "5",4));
System.out.println(this.divide("67.751", "5",1));
Les résultats en cours d'exécution sont les suivants :
13.5500
13.5
-------
13.5502
13.6
J'étais confus. Logiquement, le deuxième résultat devrait être 13,5 ! Pourquoi est-il devenu 13,6 ? Après de nombreux tests, j'y ai réfléchi et j'ai découvert que cet arrondi n'est pas basé sur le décalage après le chiffre de précision et le compare à 5, mais que toutes les données après le chiffre de précision sont comparées à 5. En d'autres termes : 13,5500 est précis à un chiffre, puis utilisez 0,0500 pour comparer avec 5, et 13,5502 est précis à un chiffre, puis utilisez 0,0502 pour comparer avec 5. Il est plus grand que 5, donc il se ferme vers le haut.
J'espère que cet article sera utile à la programmation Java de chacun.