|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Nouveau Membre du Club
![]() Inscription : décembre 2006 Messages : 321 ![]() |
Bonjour,
J'ai un bug très bizarre. Quand je fais un echo (100-99.99), çà devrait me retourner 0.01 et çà me retourne une valeur du type 0.010000526. Hallucinant non !!! Au début j'ai cru que çà venait de la bdd mais non juste avec un echo de 100-99.99 çà renvoie n'importe quoi. Merci de votre aide |
|
|
00
|
|
|
#2 |
|
Membre émérite
![]() Franck Développeur Web indépendant Inscription : avril 2007 Messages : 678 ![]() |
bonsoir,
Je n'ai pas essayé, mais moi j'aurais fait le calcul dans une variable et je retournerai cette même variable. Je ne sais pas si c'est une solution au pb, mais j'aurai essayé de t'aider :p ++ |
|
00
|
|
|
#3 | |||
|
Invité de passage
![]() Inscription : juin 2006 Messages : 11 ![]() |
Salut à toi
Voici un test que j'ai effectué en local : Mon code : Code :
Citation:
Sinon à part ça chez moi ca marche très bien (PHP5.1.4 / Apache 2.2.2) |
|||
|
|
00
|
|
|
#4 |
|
Nouveau Membre du Club
![]() Inscription : décembre 2006 Messages : 321 ![]() |
Bizarre effectivement, je viens de faire un test en mettant une variable à la place genre $a=100-99.99 çà retourne pareil une valeur éronnée
Donc çà vient d'autre chose, par contre mon test je le fais en ligne sur mon site et çà merde grave j'ai créé un fichier calcul.php <?php echo 100-99.99; ?> voilà et çà retourne n'importe quoi. J'ai vu que mon hébergeur a une vieille version de php la 4.4.4, je prie pour que çà vienne pas de chez eux ou je suis mal. Par contre, vous me confirmez que çà ne peut pas venir de ma version de php qui est installé chez moi qui doit etre assez ancienne je pense. merci |
|
|
00
|
|
|
#5 |
|
Membre émérite
![]() Franck Développeur Web indépendant Inscription : avril 2007 Messages : 678 ![]() |
Honnêtement je trouve ça très bizar,
Chez moi tout fonctionne et les valeurs sont corrects. Dans tous les cas ça ne peu pas venir de ta version chez toi vu que tu fais les tests en ligne. Ta version ne peu influer sur celle de ton hébergeur. Est-ce qu'un autre calcul fonctionne?? normalement même une version php3 devrais fonctionner. Essai avec: ++ |
|
00
|
|
|
#6 | ||
|
Membre chevronné
![]() Étudiant Inscription : août 2005 Messages : 632 ![]() |
Sans vouloir rentrer dans les détails du stockage et des calculs machines, je dirais que c'est tout à fait normal et que ce n'est pas un probleme de php mais un probleme du au codage en binaire des nombres. Et oui, l'ordinateur ne calcul pas en base10 (de 0 à 9) mais en base 2 (0 ou 1). Si nous avons des bonnes valeurs, ce n'est que du à un arrondi.
Petit algo sensé s'arreter mais avec la logique binaire de la machine, c'est une boucle infinie (et pourtant si vous regardez, il affiche $n = 1 MAIS $n != 1 étrange hein :p) : Code :
|
||
|
|
00
|
|
|
#7 |
|
Membre confirmé
![]() Inscription : mai 2004 Messages : 536 ![]() |
Moi je sais pas si c'est étrange mais je trouve ça normal puisque 1 n'est pas égal à 1.00. N'est-ce pas dû au typage faible de php ? Je pense qu'il faudrait essaier de tester le type de la variable. Dans ton algo Korko Fain tu initialises ta variable à 0 essaie un 0.00 et dans ton while essaie aussi un 1.00 pour voir ![]() En java en tout cas on pourrait pas incrémenter un int de 0.1 ce qui est logique
|
|
|
00
|
|
|
#8 |
|
Nouveau Membre du Club
![]() Inscription : décembre 2006 Messages : 321 ![]() |
Bonjour à tous,
çà commence à me prendre le chou cette histoire je viens de passer en php5 et c'est toujours pareil et meme si on fait 100.00-99.99 c'est pareil j'en ai marre là franchement c'est quoi ce langage à 2 franc franchement. Je connais pas un langage qui soit incapable de faire un calcul de base tel que 100-99.99. Je fais quoi de mon site moi du coup ??? Si mes calculs sont tous faux je peux rien faire. J'aurais du faire en asp c'est pas possible çà me gave franchement là merci php franchement. |
|
|
00
|
|
|
#9 |
|
Membre expérimenté
![]() Développeur Web Inscription : avril 2006 Messages : 430 ![]() |
T'as essayé de faire le calcul dans un autre langage (serveur) ?
Sinon, comme t'auras pu le constater, les autres ici ont les bons résultats, et ca m'étonnerait franchement qu'un bug comme celui-ci soit passé inapercu, de plus sur des version 4 et 5
__________________
Merci à Microsoft pour avoir transformé un métier relativement terne et basé sur une approche bêtement technique et rigoureuse des faits, en challenge quotidien, nécessitant une remise en question permanente à l'échelle du quart d'heure |
|
|
00
|
|
|
#10 |
|
Membre chevronné
![]() Étudiant Inscription : août 2005 Messages : 632 ![]() |
Essaye de faire des arrondi avec round. Si tu as des chiffres complets c'est justement pcq ton serveur est trop précis.
Et en php 1 == 1.00 mais 1 !== 1.00 (!== est l'inverse de ===) |
|
|
00
|
|
|
#11 |
|
Nouveau Membre du Club
![]() Inscription : décembre 2006 Messages : 321 ![]() |
je viens de faire un test chez free et c'est pareil même problème.
|
|
|
00
|
|
|
#12 | ||||
|
Membre du Club
![]() |
Citation:
voir la doc en ligne de php: http://ca.php.net/manual/fr/language.types.float.php Citation:
Code :
|
||||
|
|
00
|
|
|
#13 |
|
Nouveau Membre du Club
![]() Inscription : décembre 2006 Messages : 321 ![]() |
bonjour,
bizarre en effet tout çà. Mon problèm reste entier car quand je fais "update table set valeur=valeur-99.99 çà merde pareil alors il faudrait arrondir le chiffre dans la base impossible non ??? C'est bizarre tout çà car aucun calcul du coup n'est correct ou exact avec php. |
|
|
00
|
|
|
#14 | |
|
Membre du Club
![]() |
Citation:
ton champ 'valeur' est définit de quelle façon dans mysql? |
|
|
|
00
|
|
|
#15 |
|
Nouveau Membre du Club
![]() Inscription : décembre 2006 Messages : 321 ![]() |
C'est trop fort ce truc lol
Vous ouvrez phpmyadmin et vous faites une requete update table set nombre=nombre-99.99 avant il faut mettre dans nombre 100 çà retourne 0.01000051 Sinon mon nombre est définit en type double. Donc mysql a le meme bug |
|
|
00
|
|
|
#16 | ||
|
Membre du Club
![]() |
Citation:
tout comme indiqué dans la docu de mysql, les seuls types de champ permettant de stocker la valeur exacte (avec une décimale), sont les types DECIMAL et NUMERIC Citation:
|
||
|
|
00
|
|
|
#17 |
|
Nouveau Membre du Club
![]() Inscription : décembre 2006 Messages : 321 ![]() |
J'ai passé une colonne en DECIMAL et là catastrophe çà m'a viré les valeurs avec des décimales du coup j'ai perdu deux jours de ma base.
|
|
|
00
|
|
|
#18 | |
|
Membre du Club
![]() |
Citation:
|
|
|
|
00
|
|
|
#19 |
|
Nouveau Membre du Club
![]() Inscription : décembre 2006 Messages : 321 ![]() |
Par contre avec le format DECIMAL, il faut définir une taille et indiquer le nombre de chiffre après la virgule, c'est bien çà ???
çà me gene car un chiffre peut avoir aussi bien 2 chiffres après la virgule que 5 çà dépend. Sinon pour la sauvegarde tu as raison mais je ne pensais vraiment pas que çà allait me faire ce truc je me suis pas méfié surtout qu'avec le nom du type 'DECIMAL' j'imaginais vraiment pas que çà allait m'enlever les chiffres après la virgule |
|
|
00
|
|
|
#20 | |
|
Membre du Club
![]() |
Citation:
Avoir su que tu avais des données je t'aurais recommander le backup avant... mais c'est trop tard.. si tu veux remettre des chiffres apres le point décimale, j'ai une petite fonction de random qui pourrait faire!!! |
|
|
|
00
|
Copyright © 2000-2012 - www.developpez.com