X

Gérer l’argent dans Laravel/PHP : les meilleures pratiques


Lorsque vous travaillez avec de l’argent dans vos projets Laravel, qu’il s’agisse des prix des produits ou du montant total des commandes facturées, nous devons être extrêmement prudents pour ne pas mal calculer quelque chose. Heureusement, il existe des bonnes pratiques et des outils pour nous aider, explorons-les dans cet article.

Ce que nous couvrirons :

  • Comportement typique (et erroné) de l’argent : flottants
  • Un pas de mieux : les nombres entiers
  • Forfaits PHP spéciaux pour de l’argent
  • Laravel Way : Moulages personnalisés
  • Conversion de devises
  • Forfaits/emballages spécifiques à Laravel

Allons-y !


Comportement typique (et erroné) de l’argent : flottants

Comment enregistrez-vous des données dans la base de données lorsque vous devez travailler avec des éléments tels que le prix du produit ou le total de la commande ?

Étant donné que le montant d’argent est un flotteur – comme 3,45 $la manière logique serait de le stocker de la même manière dans la base de données.

1$table->decimal('price', 8, 2);

2// 8 is total digits, 2 is decimal digits

Et puis, chaque fois que vous avez besoin d’afficher le prix dans Blade, vous faites quelque chose comme :

1Total price: ${{ number_format($product->price, 2) }}

Dans le code ci-dessus, nous avons besoin number_format() de sorte que 9.1 serait affiché comme 9.10, avec deux chiffres.

Dans la plupart des cas, cette approche devrait bien fonctionner, tant que vous n’avez qu’une devise dans votre projet et que vous ne faites pas beaucoup de calculs avec ces champs.

Mais la façon dont les langages de programmation et les moteurs de base de données fonctionnent avec le calcul des flottants, vous pouvez rencontrer un problème d’arrondi. Cela signifie que vous pouvez avoir des calculs incorrects de 0,01 si les mauvais arrondis s’additionnent.

Voici quelques articles pour en savoir plus sur ce problème :


Si vous n’êtes pas d’humeur à lire ces articles, et si vous voulez simplement me faire confiance, je vais vous simplifier la tâche :

NE JAMAIS ENREGISTRER DE VALEURS MONÉTAIRES COMME DES FLOTTEURS DANS LA BASE DE DONNÉES.

Voilà, je l’ai dit.

Voici une autre citation pour toi:

Oui, la possibilité que cette erreur d’arrondi se produise est très faible, mais il vaut quand même mieux être prudent, n’est-ce pas ? Voici donc les solutions ci-dessous…