Java Language Utiliser BigDecimal au lieu de float


Exemple

En raison de la représentation du type float dans la mémoire de l'ordinateur, les résultats des opérations utilisant ce type peuvent être inexacts - certaines valeurs sont stockées sous forme d'approximations. Les calculs monétaires en sont de bons exemples. Si une haute précision est nécessaire, d'autres types doivent être utilisés. Par exemple, Java 7 fournit BigDecimal.

import java.math.BigDecimal;

public class FloatTest {

public static void main(String[] args) {
    float accountBalance = 10000.00f;
    System.out.println("Operations using float:");
    System.out.println("1000 operations for 1.99");
    for(int i = 0; i<1000; i++){
        accountBalance -= 1.99f;
    }
    System.out.println(String.format("Account balance after float operations: %f", accountBalance));
    
    BigDecimal accountBalanceTwo = new BigDecimal("10000.00");
    System.out.println("Operations using BigDecimal:");
    System.out.println("1000 operations for 1.99");
    BigDecimal operation = new BigDecimal("1.99");
    for(int i = 0; i<1000; i++){
        accountBalanceTwo = accountBalanceTwo.subtract(operation);
    }
    System.out.println(String.format("Account balance after BigDecimal operations: %f", accountBalanceTwo));
}

Le résultat de ce programme est:

Operations using float:
1000 operations for 1.99
Account balance after float operations: 8009,765625
Operations using BigDecimal:
1000 operations for 1.99
Account balance after BigDecimal operations: 8010,000000

Pour un solde initial de 10 000,00, après 1 000 opérations pour 1,99, le solde devrait être de 8010,00. L'utilisation du type float nous donne une réponse autour de 8009.77, ce qui est très imprécis dans le cas des calculs monétaires. L'utilisation de BigDecimal nous donne le bon résultat.