MySQL ne sait pas calculer ? [SQL] - SQL/NoSQL - Programmation
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
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
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 ?
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...
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...
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