probleme avec les variables float

Eléphanteau du PHP | 26 Messages

05 juin 2012, 11:59

Bonjour tout le monde, j'ai un grand grand probleme que j'arrive pas a résoudre ni a comprendre l'origine, voila je je procede au calcule des taux comme $x=(54400/70000)*100 , je passe le resultat avec numeber_format($x, 2, ',' , ' '), je l'enregistre sur une table mysql dont le champ est de type Float mais l'orsque j'extrait le resultat j'ai un $y=77.7699966430664 alors que meme avec une calculatrice (54400/70000)*100=77.7714....
alors pourquoi le resultat change????!!!!!!!!!

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

05 juin 2012, 13:52

Les types float et double qui permettent de gérer des nombres décimaux, impliquent une notion de précisions des valeurs qu'ils traitent. Lorsque tu veux stocker un nombre réel dans un champ comprenant un nombre limité de chiffres, il est nécessaire pour le système de calculer une approximation de la valeur d'origine.
Tu peux donc te retrouver avec un écart entre le nombre d'origine et la valeur stockée ; écart plus ou moins proche de la décimale selon la précision gérée.
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphanteau du PHP | 26 Messages

05 juin 2012, 14:06

merci pour votre explication, mais comment eviter cela??

ViPHP
ViPHP | 2577 Messages

05 juin 2012, 14:54

Ce n'est pas possible. C'est le passage du mode décimale au mode binaire qui veux ca.
Tu remarqueras qu'avec 2 décimales, tu gardes le même résultat.

Eventuellement, tu peux travailler en centime pour échapper au problème.

Mammouth du PHP | 2278 Messages

05 juin 2012, 16:47

en utilisant le type decimal de Mysql
Vanitas vanitatum et omnia vanitas
Mes derniers livres :
Sauvez les Mots chez BoD,
Tous les chemins mènent à ROM chez BoD

Eléphanteau du PHP | 26 Messages

05 juin 2012, 17:43

merci pour le conseil l'ami