Comment calculer les valeurs monétaires en Java

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.