[RESOLU] la précision avec le type float

Eléphant du PHP | 65 Messages

13 sept. 2016, 18:04

Bonjour à tous,
Avec SQL on a le type decimal qui nous permet de définir un nombre à virgule qui ne sera jamais arrondi. Avec le type float en php on a pas ça, c'est une valeur approchée du nombre qui est stockée et si on a un très grand nombre celui-ci est tronqué par la notation scientifique. Alors voilà, je ne sais pas comment traiter des nombres à virgules (l'exemple du compte en banque est le plus parlant) qu'on a récupéré dans une bdd (sous forme de string donc) et qu'on veut afficher en entier et faire des opérations dessus, même si ce sont de très grands nombres. Si je convertis en float, le nombre prend une forme scientifique et si je laisse en string, j'ai l'impression que sémantiquement c'est pas correct... Je ne sais pas comment m'y prendre, si vous pouviez éclairer ma lanterne :oops:

Merci!

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

13 sept. 2016, 22:50

Un nombre en informatique est toujours arrondi après un certain nombre de chiffres derrière la virgule ou si le nombre est trop grand. Et même sa représentation interne n'est pas forcément logique pour un humain.
Il y a une assez bonne explication ici : http://floating-point-gui.de

A noter que le type decimal en MySQL a aussi des limitations : https://dev.mysql.com/doc/refman/5.7/en ... stics.html


Toutefois si c'est juste pour traiter des montant de comptes en banque tu devrais largement t'en sortir avec les fonctions standards.
Tu peux aussi regarder du côté des fonctions GMP : http://php.net/manual/fr/ref.gmp.php
Quand tout le reste a échoué, lisez le mode d'emploi...

Eléphant du PHP | 65 Messages

14 sept. 2016, 10:59

Merci @rthur, j'ai trouvé en fait il faut utiliser les fonctions BC Maths.