Rechercher : dans
Par :

Bug calcul php

Dernière réponse le 27 oct 2008 à 20:32:12 KountaK., le 27 oct 2008 à 06:55:12 
 Signaler ce message aux modérateurs

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

Meilleures réponses pour « Bug calcul php » dans :
[PHP] Upload de fichiers VoirLe langage PHP permet de gérer des fichiers envoyés (uploadés) grâce à un formulaire HTML. Formulaire d'envoi de fichiers Configuration de PHP pour permettre l'upload Récupération du fichier avec PHP Formulaire d'envoi de fichiers La...
[PHP] Notice: Undefined index: VoirSi vous utilisez les tableaux $_POST ou $_GET pour récupérer les variables de vos formulaires ou autres, il se peut que vous tombiez sur cette erreur: Notice: Undefined index 'champs du tableau' in 'chemin du fichier php en cours d'execution' on line...
[PHP] Parse error, unexpected T_STRING, expecting ',' or ';' VoirCette erreur, fréquente, se produit notamment lorsqu'un guillemet est présent dans une chaîne délimitée par ce même type de guillemets, par exemple :
Télécharger PHP Edit VoirPHPEdit est un environnement de développement intégré (IDE) sous Windows pour le langage PHP. Il offre un grand nombre de fonctionnalités permettant de développer plus efficacement : Coloration syntaxique Auto-complétion des fonctions Débuggeur...
PHP - Les fichiers VoirLa gestion des fichiers avec PHP Avec PHP, la création ou la lecture de fichiers est, une fois de plus, assez simple. Il existe une multitude de fonctions dédiées à l'utilisation des fichiers. La communication entre le script PHP et le fichier...
PHP - Récupération de données VoirPHP rend très simple la récupération de données envoyées par l'intermédiaire de formulaires HTML. Création d'un formulaire Grâce à la balise FORM du langage HTML, il est très simple de créer des formulaires comprenant : des champs de saisie des...
PHP - Structures conditionnelles VoirQu'est-ce qu'une structure conditionnelle? On appelle structure conditionnelle les instructions qui permettent de tester si une condition est vraie ou non, c'est-à-dire si la valeur de son expression vaut 0 ou 1 (le PHP associe le mot clé true à 1...

1

briiiiix, le 27 oct 2008 à 09:29:01
  • +1

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

Répondre à briiiiix

2

KountaK., le 27 oct 2008 à 17:05:50

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)

Répondre à KountaK.

3

briiiiix, le 27 oct 2008 à 17:20:36

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

Répondre à briiiiix

4

KountaK., le 27 oct 2008 à 17:49:21

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 ;)

Répondre à KountaK.

5

briiiiix, le 27 oct 2008 à 17:50:58

Verifies dans mysql, si cette ligne contient un espace qui fausse tes calculs.

Répondre à briiiiix

6

KountaK., le 27 oct 2008 à 18:05:46

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.

Répondre à KountaK.

7

 briiiiix, le 27 oct 2008 à 20:32:12

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

Répondre à briiiiix