Salut à tous !!!

J'ai une petite question, peut être un peu basique, mais je n'ai pas encore trouvé de réponse très probante.

Je cherche une solution simple pour utiliser des nombres décimaux (plus ou moins longs) sans que PHP ne l'arrondisse ou effectue le moindre traitement dessus.

Pour être plus claire, j'aimerais stocker et utiliser des chiffres décimaux, cepedant, php arrondie toujours les nombres trop précit, il y aurait t'il un moyen de désactiver ça ? Exemple avec un chiffre bidon :

$input = 123456789.123456789;
var_dump($input); // retourne un nombre flottant : 123456789.12346

Pourquoi ce nombre est t'il coupé/arrondi ?

J'ai réellement besoin de garder ce nombre complêt vu que c'est des taux de conversions utilisés dans un système de multi-devises ... Moi je suis ok pour arrondir un peu à des valeurs supérieurs, mais les clients pas sure :) à tester ;)

Merci par avance !

Clément.

2 réponses


SimonDevelop
Réponse acceptée

D'après la doc de php => https://www.php.net/manual/fr/language.types.float.php

Précision des nombres flottants

Les nombres flottants ont une précision limitée. Même s'ils dépendent du système, PHP utilise le format de précision des décimaux IEEE 754, qui donnera une erreur maximale relative de l'ordre de 1.11e-16 (dûe aux arrondis). Les opérations arithmétiques non-élémentaires peuvent donner des erreurs plus importantes et bien sûr les erreurs doivent être prises en compte lorsque plusieurs opérations sont liées.

Aussi, les nombres rationnels exactement représentables sous forme de nombre à virgule flottante en base 10, comme 0.1 ou 0.7, n'ont pas de représentation exacte comme nombres à virgule flottante en base 2, utilisée en interne, et ce quelle que soit la taille de la mantisse. De ce fait, ils ne peuvent être convertis sans une petite perte de précision. Ceci peut mener à des résultats confus: par exemple, floor((0.1+0.7)*10) retournera normalement 7 au lieu de 8 attendu, car la représentation interne sera quelque chose comme 7.9999999999999991118....

Ainsi, ne faites jamais confiance aux derniers chiffres d'un nombre flottant, mais aussi, ne comparez pas l'égalité de 2 nombres flottant directement. Si une plus grande précision est nécessaire, les fonctions mathématiques de précision arbitraire et les fonctions gmp sont disponibles.

Pour une explication "simple", voir le » guide relatif aux nombres à virgule flottante.

Merci pour ta réponse, ça répond à mon besoin, je pars la dessus ;)