Comment calculer les valeurs monétaires en Java
Les valeurs monétaires sont généralement programmées dans l'application financière ou e-commerce. Lorsque vous traitez avec la valeur «argent», la question se pose toujours: Dois-je utiliser le type de donnéesdouble
oufloat
pour représenter les valeurs monétaires?
Answer: utilise toujoursjava.math.BigDecimal
pour représenter les valeurs monétaires.
1. Valeurs monétaires - Double
Voici un exemple d'utilisation de double pour représenter les valeurs monétaires en Java.
MoneyDouble.java
package com.example.test; public class MoneyDouble { public static void main(String[] argv) { System.out.println("--- Normal Print-----"); System.out.println(2.00 - 1.1); System.out.println(2.00 - 1.2); System.out.println(2.00 - 1.3); System.out.println(2.00 - 1.4); System.out.println(2.00 - 1.5); System.out.println(2.00 - 1.6); System.out.println(2.00 - 1.7); System.out.println(2.00 - 1.8); System.out.println(2.00 - 1.9); System.out.println(2.00 - 2); } }
Sortie - Il ne peut pas calculer toutes les décimales doubles avec précision.
--- Normal Print----- 0.8999999999999999 0.8 0.7 0.6000000000000001 0.5 0.3999999999999999 0.30000000000000004 0.19999999999999996 0.10000000000000009 0.0
2. Valeurs monétaires - BigDecimal
Pour éviter le problème décimal ci-dessus, vous pouvez utiliserBigDecimal
pour représenter les valeurs monétaires.
MoneyBigDecimal.java
package com.example.test; import java.math.BigDecimal; public class MoneyBigDecimal { public static void main(String[] argv) { System.out.println("--- BigDecimal-----"); System.out.println(new BigDecimal("2.00").subtract(new BigDecimal("1.1"))); System.out.println(new BigDecimal("2.00").subtract(new BigDecimal("1.2"))); System.out.println(new BigDecimal("2.00").subtract(new BigDecimal("1.3"))); System.out.println(new BigDecimal("2.00").subtract(new BigDecimal("1.4"))); System.out.println(new BigDecimal("2.00").subtract(new BigDecimal("1.5"))); System.out.println(new BigDecimal("2.00").subtract(new BigDecimal("1.6"))); System.out.println(new BigDecimal("2.00").subtract(new BigDecimal("1.7"))); System.out.println(new BigDecimal("2.00").subtract(new BigDecimal("1.8"))); System.out.println(new BigDecimal("2.00").subtract(new BigDecimal("1.9"))); System.out.println(new BigDecimal("2.00").subtract(new BigDecimal("2"))); } }
Sortie - BigDecimal effectue une arithmétique décimale exacte.
--- BigDecimal----- 0.90 0.80 0.70 0.60 0.50 0.40 0.30 0.20 0.10 0.00
Note
Les calculs BigDecimal sont plus lents que ceux avec des calculs de type primitif, ce qui peut être un problème pour l'application de calcul critique. Pour la plupart des applications de commerce électronique, ça devrait aller.