0Pricing
Java Academy · Leçon

Pourquoi ne pas utiliser double pour l’argent

Problèmes de précision des nombres flottants

Pourquoi ne pas utiliser double pour l’argent est une leçon Java Academy gratuite sur CoddyKit. Ceci est la leçon 1 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage Java Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours Java Academy comprend 4 leçons au total.

Un choix par défaut dangereux

Il semble naturel de stocker les prix dans un double. Malheureusement, le type double ne peut pas représenter exactement la plupart des fractions décimales, ce qui entraîne de minuscules erreurs qui faussent les calculs financiers.

La surprise classique

Additionnez 0.1 et 0.2 avec double et vous n’obtenez pas 0.3. Vous obtenez une valeur entachée d’une minuscule erreur d’arrondi.

public class Main {
    public static void main(String[] args) {
        double result = 0.1 + 0.2;
        System.out.println(result);
    }
}

Pourquoi cela se produit

Les ordinateurs stockent le type double en binaire. De même qu’un tiers ne peut pas s’écrire exactement en notation décimale, de nombreux nombres décimaux comme 0.1 ne peuvent pas s’écrire exactement en binaire.

L’approximation binaire la plus proche est stockée, et l’erreur s’accumule.

Les erreurs s’accumulent

Une seule petite erreur peut sembler inoffensive, mais dans une boucle parcourant des milliers de transactions, les écarts s’accumulent jusqu’à produire des erreurs visibles.

public class Main {
    public static void main(String[] args) {
        double total = 0.0;
        for (int i = 0; i < 10; i++) {
            total += 0.1;
        }
        System.out.println(total);
    }
}

Égalité impossible

En raison des erreurs d’arrondi, comparer des valeurs de type double calculées avec == échoue souvent alors que vous vous attendez à ce qu’elles soient égales.

public class Main {
    public static void main(String[] args) {
        double a = 0.1 + 0.2;
        double b = 0.3;
        System.out.println(a == b);
    }
}

L’argent exige l’exactitude

En finance, une erreur même inférieure à un centime est inacceptable. Les auditeurs s’attendent à ce que les totaux concordent au centime près.

C’est pourquoi l’argent ne doit jamais être stocké dans un type à virgule flottante.

La solution : BigDecimal

Java fournit BigDecimal, une classe qui stocke exactement les nombres décimaux. Elle suit séparément la valeur non mise à l’échelle et l’échelle, si bien que 0.1 représente réellement 0.1.

import java.math.BigDecimal;

public class Main {
    public static void main(String[] args) {
        BigDecimal a = new BigDecimal("0.1");
        BigDecimal b = new BigDecimal("0.2");
        System.out.println(a.add(b));
    }
}

Utilisez toujours un constructeur de chaîne

Créez un BigDecimal à partir d’une chaîne de caractères, et non à partir d’un double. Transmettre une valeur de type double introduit l’erreur binaire dans le BigDecimal.

import java.math.BigDecimal;

public class Main {
    public static void main(String[] args) {
        BigDecimal fromDouble = new BigDecimal(0.1);
        BigDecimal fromString = new BigDecimal("0.1");
        System.out.println(fromDouble);
        System.out.println(fromString);
    }
}

Ou utilisez valueOf

BigDecimal.valueOf est un raccourci sûr. Il convertit le double à l’aide de sa forme canonique sous forme de chaîne, ce qui évite l’erreur binaire brute.

import java.math.BigDecimal;

public class Main {
    public static void main(String[] args) {
        BigDecimal price = BigDecimal.valueOf(19.99);
        System.out.println(price);
    }
}

Stocker l’argent en centimes

Pour les cas simples, vous pouvez aussi stocker l’argent comme un nombre entier de centimes, en utilisant long. Ainsi, 19.99 dollars devient 1999 centimes et tous les calculs sont des calculs entiers exacts.

public class Main {
    public static void main(String[] args) {
        long cents = 1999;
        long total = cents * 3;
        System.out.println(total + " cents");
    }
}

À retenir

Utilisez float et double pour les travaux scientifiques et graphiques, où de petites erreurs sont acceptables. Pour l’argent et toute valeur qui doit être exacte, utilisez BigDecimal ou un nombre entier de centimes.

Vérification rapide

Évaluez votre compréhension de la précision des nombres à virgule flottante.

Récapitulatif

Vous avez appris pourquoi le type double ne convient pas à l’argent :

  • Les nombres à virgule flottante binaires ne peuvent pas stocker exactement de nombreux nombres décimaux
  • Les erreurs, comme le fait que 0.1 + 0.2 ne soit pas égal à 0.3, s’accumulent
  • Utilisez BigDecimal pour les calculs décimaux exacts
  • Créez-le à partir d’une chaîne de caractères ou avec valueOf, jamais à partir d’un double brut
  • Stocker des centimes sous forme entière est une autre solution exacte

Questions Fréquemment Posées

La leçon « Pourquoi ne pas utiliser double pour l’argent » est-elle gratuite ?

Oui — le texte complet de « Pourquoi ne pas utiliser double pour l’argent » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours Java Academy, passe à CoddyKit PRO. Le cours Java Academy comprend 4 leçons au total.

Qu'est-ce que j'apprendrai dans « Pourquoi ne pas utiliser double pour l’argent » ?

Problèmes de précision des nombres flottants Tu pratiques Java Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.

Dois-je avoir de l'expérience pour commencer Java Academy ?

Aucune expérience préalable n'est requise. Java Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 1 sur 4.

Combien de temps prend la leçon « Pourquoi ne pas utiliser double pour l’argent » ?

La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.

Peux-tu écrire et exécuter du code dans cette leçon Java Academy ?

Oui. Chaque leçon Java Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.

Toutes les leçons de ce cours

  1. Pourquoi ne pas utiliser double pour l’argent
  2. Travailler avec BigDecimal
  3. Arrondi et échelle
  4. BigInteger pour les nombres gigantesques
← Retour à Java Academy