Posez votre question Signaler

Bug calcul php

KountaK. 5Messages postés 29 juin 2008Date d'inscription - Dernière réponse le 27 oct. 2008 à 20:32
Bonjour,
J'effectue avec php des calculs à partir de variables MySQL de type DECIMAL(6,2) et lorsque je tombe sur 0.05 + (-0.05) le résultat retourné par PHP est 1.3877787807814E-17 (en théorie ça devrait être 0 non ? ^^).
La version de PHP est 4.4.9
Dans PHPmyAdmin :
Version du serveur MySQL : 5.0.44-log
Version du client MySQL: 5.0.32
Merci
Lire la suite 

Bug calcul php »

7 réponses
Réponse
+1
moins plus
Tu dois convertir tes variables en type float, lis la documentation php et tu sauras comment convertir

-----------------------------------------
Les conversions autorisées sont :


(int), (integer) - type entier

(bool), (boolean) - booléen

(double), (float), (real) - type double

(string) - type chaîne de caractère

(array) - type tableau

(object) - type objet
Ajouter un commentaire
Réponse
+0
moins plus
Merci de ta réponse mais j'avais déjà regardé la doc à ce sujet.
Le problème persiste cependant.

Dois-je définir le type float dans mysql ou lors du calcul en php ? ou les 2 ?


J'ai déja essayé :

(float) 0.05 + (float) -0.05 mais le résultat reste le même.
(double) 0.05 + (double) -0.05 idem

Lorsque je le fais directement en php comme je viens de l'écrire ça donne bien zéro, mais quand je prend ces mêmes valeurs à partir de la bdd ça me donne un nombre qui tend vers zéro. (en prenant soin de définir les variables en php)

La colonne de la table en question était déjà de type float avant que je ne la convertisse en décimal, et le résultat était le même.
Le plus bizarre c'est que j'ai d'autres valeurs du même type dans cette table et ça donne bien zéro à chaque fois, c'est toujours les même lignes qui posent problèmes.

PS : lorsque je procède au calcul dans un ordre différent le résultat est bien zéro :s (ex : -0.05 + 0.05 = 0)
Ajouter un commentaire
Réponse
+0
moins plus
Est ce que tu as besoin que le résultat soit en float ou en int?
Si ton resultat doit etre en float tu pourras l'arrendir et comme ça tu auras 0
Ajouter un commentaire
Réponse
+0
moins plus
Oui j'ai pensé a ce contournement de problème mais si je dois mettre du round() a chaque fois dans tous mes script ça va être la galère !

Est-ce que tout le monde fait comme ça ? ou est-ce un défaut de PHP ou MySQL ?

Comme je l'ai dis le plus bizarre c'est que sur les autres lignes de ma table qui ont exactement les mêmes valeurs et avec lesquelles je procède exactement au même calcul me retourne bien zéro, j'ai plus de 1000 lignes et il n'y a que ces 2 là qui me pose problème.

Dois-je toujours mettre du round() dans mes calcul pour éviter ce genre de bug ? (car pour moi ça reste un bug)

Cela fait des années que je touche à PHP+MySQL et c'est bien la 1ère fois que ça m'arrive.... :'(


En tout cas merci pour ton soutien ;)
Ajouter un commentaire
Réponse
+0
moins plus
verifies dans mysql, si cette ligne contient un espace qui fausse tes calculs.
Ajouter un commentaire
Réponse
+0
moins plus
J'ai déjà vérifié ça aussi, j'ai modifié les 0.05 en 0.06 et les -0.05 en -0.06 pour que MySQL prenne en compte les modifications puis j'ai remis 0.05 et -0.05, le résultat reste le même.

Bien évidemment avec un round($resultat, 2) sur le résultat ça me retourne bien zéro mais faire du round() pour que 0.05 - 0.05 = 0 je trouve ça dommage que PHP ne comprenne pas ça.
Ajouter un commentaire
Réponse
+0
moins plus
Est ce possible de m'envoyer juste le fichier sql de la table par mail par exemple, je testerais nça chez moi.
Envoi moi stp un msg perso sur le forum je te renseignerais mon mail.
Bon travail
Ajouter un commentaire
Ce document intitulé « Bug calcul php » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.
Dossier à la une
5 extensions si vous voulez revenir à l'ancien Facebook