[SQL] MySQL ne sait pas calculer ?

MySQL ne sait pas calculer ? [SQL] - SQL/NoSQL - Programmation

Marsh Posté le 26-06-2002 à 14:21:33    

Salut
 
J'ai un problème avec une requete qui fait des opérations sur un moteur MySQL
 
Si je dis à MySQL de calculer le prix d'un article :
 
 PRIX x POURCENTAGE * 0.01
 
Exemple :
 
= 9.15 ? x 70 x 0.01
= 9.15 * 0.7
= 6.405 ?
 
Si on arrondis, ca fait 6.41 ?
 
Or, dans MySQL voilà ce que ca donne
 
= 9.15 ? x 70 x 0.01
= 9.15 * 0.7
= 6.4049997329712  
Si on arrondis, 6.40
 
Voilà on est tous le problème, je ne sais pas pourquoi le moteur de la base de données
n'est pas capable de trouver un résultat, alors qu'il tombe juste (c pas comme si on faisait 1 / 3, ou la ca ne tombera jamais juste).
 
J'ai essayé de mettre des ROUND( ,2) un peu partout, ca marche jamais.
 
Help please... :(
 
LELFE


Message édité par lelfe le 26-06-2002 à 14:23:47
Reply

Marsh Posté le 26-06-2002 à 14:21:33   

Reply

Marsh Posté le 26-06-2002 à 15:24:40    

Comment sont stokées tes nombres ?
dans des entiers ou nombres a virgule fixe, ou des flottants ?
 
Si tu stokes dans des flottants, MYSQL ne se trompe pas, mais toi oui...   ...en disant que ca ne tombe juste, pas comme 1/3
 
comment ecrire 1/3 en base 3 ?
 
0.1 -> 0*3 + 1*(1/3)... donc 1/3 en base 3 tombe juste...
 
maintenant comment ecrire 0.1 en base 2 ?
 
0.1 c'est 1/10, soit (1/2)*(1/5) or 5 est premier avec deux...
donc 0.1 (et 0.01 aussi) ne peuvent etre ecrit exacement en base 2, or les flottant sont stokées en mémoire sous la forme
mmmmmmmmmbbb ou m est la mantisse en binaire et bbb l'exposant de 2
soit mmmmmmmm *2^bbb.... sans entrer dans les détails

Reply

Marsh Posté le 26-06-2002 à 21:14:00    

C'est vrai, que vu, comme ca, tu as raison.
Fallait pas oublié ces cours d'Archi trop vite.
 
Ma question, comment je vais pour résoudre mon problème ?
Ou comment dire à MySQL de calculer en base 10 et pas en binaire :) en inventant un processeur qui sait gérer le base 10 :)
 
 
Mon prix en FLOAT
Mon pourcentage en TINYINT
et mon 0.01 est une constante, mais je suppose, traitée en tant que FLOAT pour le calcul.
 
Y'a-t-il un moyen d'obtenir le bon résultat ?
Please... :(
 
LELFE

Reply

Marsh Posté le 26-06-2002 à 21:37:31    

Tiens au fait, pourquoi si j'affiche juste  
 
POURCENTAGE * 0.01
 
Le résultat tombe juste, j'ai pas une valeur approchée ?

Reply

Marsh Posté le 27-06-2002 à 09:44:36    

lelfe a écrit a écrit :

Tiens au fait, pourquoi si j'affiche juste  
 
POURCENTAGE * 0.01
 
Le résultat tombe juste, j'ai pas une valeur approchée ?




Parce que la valeur approchée est arrondie a l'affichage...
Une methode consiste a travailler en entiers en cent(imes) puis de diviser par 100 à l'affichage...

Reply

Marsh Posté le 27-06-2002 à 11:34:05    

Oh, que je suis bete !
Mais y'a des moments ou je me demande si je réfléchis ou pas ? ;)
 
J'ai essayé de mettre ceci en application mais l'affaire se corse qd je dois faire une SUM( ) sur ce genre de calcul.
Pas de problème, je calcul en centimes, puis je le passe en euros avec une division, puis je somme, mais ca ne fonctionne pas
 
SUM(   ROUND(   RESULTAT/100, 2  ) )
 
RESULTAT = 640.50
RESULTAT/100 = 6.4050  (pourquoi garde-t-il les zéros non significatifs ?)
ROUND( RESULTAT/100, 2 ) = 6.40 !!!!!
 
Alors, là, je comprends vraiment plus.
 
LELFE
 
P.S.:  Merci à BENB, la seule personne à s'etre pencher sur mon cas et à m'aider...

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed