Deux décimales en PHP : meilleures méthodes 2025

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Pourquoi « simple round() » ne suffit plus ? Regard sur 2025

\n\n

Quiconque a déjà développé une boutique en ligne, un module comptable ou un parser de taux de change en PHP s'est posé la question : « Comment afficher joliment le nombre 19.9999999999999 en 20.00 ? » Sur Stack Overflow, cette question cumule des milliers de vues, et pour cause. En 2025, alors que PHP arbore fièrement les versions 8.4 et supérieures, les bonnes vieilles astuces avec round() réservent parfois des surprises dignes d'un film d'horreur.

\n\n

Prenons le temps de comprendre une bonne fois pour toutes : comment afficher un nombre avec deux décimales en PHP, de manière fiable, élégante et conforme aux standards actuels. Nous ne nous contenterons pas de copier une réponse de forum — nous comprendrons pourquoi chaque méthode fonctionne comme elle le fait.

\n\n

Problème n°1 : La virgule flottante, votre ennemi sournois

\n\n

PHP, comme la plupart des langages, utilise le format IEEE 754 pour les nombres à virgule flottante (float). Cela signifie que 0.1 + 0.2 peut ne pas donner 0.3, mais 0.30000000000000004. Et 19.95 multiplié par 100 peut donner 1994.9999999999998. Si vous appelez simplement round(), vous obtiendrez un résultat inattendu.

\n\n

En 2025, la règle numéro un est donc : ne faites pas confiance aux floats pour les finances. Mais si vous avez simplement besoin de formater un affichage (par exemple, un prix sur une vitrine), les méthodes suivantes sont exactement ce qu'il vous faut.

\n\n

Méthode n°1 : La classique — number_format()

\n\n

C'est la méthode la plus populaire et la plus sûre pour 99% des cas. La fonction number_format() ne se contente pas d'arrondir — elle formate le nombre avec des séparateurs de milliers et un nombre défini de décimales.

\n\n
<?php\n$price = 19.999999;\necho number_format($price, 2, '.', ''); // Affiche : 20.00\n\n$salary = 1234.5;\necho number_format($salary, 2, '.', ','); // Affiche : 1,234.50\n?>
\n\n

Pourquoi c'est génial :

\n
    \n
  • Arrondit automatiquement au nombre de décimales spécifié (selon les règles mathématiques).
  • \n
  • Permet de définir son propre séparateur pour la partie entière et décimale.
  • \n
  • Ajoute des zéros si la partie décimale est trop courte (par exemple, 5.00 au lieu de 5).
  • \n
\n\n

Point subtil : Si vous passez une chaîne, PHP tentera de la convertir en nombre. Soyez prudent avec les locales — une virgule dans la chaîne pourrait ne pas être interprétée comme un séparateur décimal.

\n\n

Quand l'utiliser ?

\n

Pour afficher des prix, des salaires, des pourcentages et toutes les données nécessitant deux décimales et une séparation des milliers.

\n\n

Méthode n°2 : La précision mathématique — round()

\n\n

La fonction round() renvoie un nombre (type float), pas une chaîne. C'est important si vous comptez effectuer d'autres calculs par la suite.

\n\n
<?php\n$value = 45.6789;\n$rounded = round($value, 2); // 45.68 (float)\n\n// Mais ! Si vous voulez absolument deux décimales et un zéro à la fin :\necho $rounded; // Affiche 45.68 (tout va bien)\necho round(45.0, 2); // Affiche 45 (float), pas 45.00\n?>
\n\n

Piège : round() utilise l'arrondi "bancaire" (round half to even) par défaut dans PHP 8+. Cela signifie que 2.5 sera arrondi à 2, et 3.5 à 4. Pour les finances, cela peut être inacceptable. Utilisez la constante PHP_ROUND_HALF_UP pour un arrondi classique :

\n\n
<?php\necho round(2.5, 0, PHP_ROUND_HALF_UP); // 3\necho round(2.5, 0); // 2 (bancaire)\n?>
\n\n

Conclusion : round() + number_format()

\n

Le duo idéal : d'abord arrondir pour les calculs, puis formater pour l'affichage.

\n\n
<?php\n$raw = 19.999999;\n$precise = round($raw, 2, PHP_ROUND_HALF_UP);\necho number_format($precise, 2, '.', ''); // 20.00\n?>
\n\n

Méthode n°3 : L'élégance de sprintf()

\n\n

La fonction sprintf() est un outil puissant de formatage de chaînes. Elle n'arrondit pas, elle tronque les décimales supplémentaires ? Non, elle arrondit aussi, mais elle le fait de manière

Blogs

Book Recommendations