question:
Lors de l'opération sur deux doubles types de valeurs, il y aura parfois des problèmes avec les valeurs de résultat anormales. Par exemple:
System.out.println (19,99 + 20); System.out.println (1.0-0.66); System.out.println (0,033 * 100); System.out.println (12.3 / 100);
Sortir:
39.989999999999999999995
0.33999999999999999999997
3.300000000000000003
0.123000000000000001
Solution:
Les types de points flottants simples flottent et doublent en Java ne peuvent pas effectuer d'opérations car il est normal dans la plupart des cas, mais parfois des problèmes comme indiqué ci-dessus se produisent. Ce problème n'est en fait pas un bug en Java, car l'ordinateur lui-même est binaire et les nombres à virgule flottante ne sont en fait que des valeurs approximatives. Par conséquent, lorsqu'il est converti de nombres binaires à décimaux à virgule flottante, la précision est facilement perdue, entraînant une diminution de la précision.
Pour assurer la précision, vous devez utiliser la classe BigDecimal et vous ne pouvez pas vous convertir directement de double en BigDecimal. Vous devez convertir le double en chaîne puis BigDecimal. Autrement dit, vous ne pouvez pas utiliser la méthode BigDecimal (double Val), et vous constaterez qu'il n'y a aucun effet. Pour utiliser la méthode BigDecimal (String Val). Des exemples spécifiques sont illustrés ci-dessous.
Exemples de quatre opérations de double type:
1. Addition
Public Static Double Add (Double A1, Double B1) {BigDecimal A2 = nouveau BigDecimal (double.ToString (A1)); BigDecimal B2 = nouveau BigDecimal (double.tostring (B1)); retour a2.add (b2) .doubleValue (); }2. Soustraction
Public Static Double Sub (Double A1, Double B1) {BigDecimal A2 = New Bigdecimal (double.ToString (A1)); BigDecimal B2 = nouveau BigDecimal (double.tostring (B1)); Retour A2.Substract (B2) .DoubleValue (); }3. Multipliez
Public Static Double Mul (Double A1, Double B1) {BigDecimal A2 = New Bigdecimal (double.ToString (A1)); BigDecimal B2 = nouveau BigDecimal (double.tostring (B1)); retourner a2.Multiply (b2) .doubleValue (); }4. Décomposition
public static double div (double A1, double b1, échelle int) {if (échelle <0) {lancer un nouveau illégalArgumentException ("erreur"); } Bigdecimal a2 = new BigDecimal (double.tostring (a1)); BigDecimal B2 = nouveau BigDecimal (double.tostring (B1)); retour a2.Divide (b2, échelle, bigdecimal.round_half_up) .DoubleValue (); }Lorsque le paramètre d'échelle est divisé en incomplet, spécifiez la précision.
La solution à l'opération anormale Résultat d'un double type en Java est tout le contenu que je partage avec vous. J'espère que vous pourrez vous faire référence et j'espère que vous pourrez soutenir Wulin.com plus.