2010-10-27 13 views
2

Regardez cette requête s'il vous plaîtmysql renvoie pas la valeur exacte dans la fonction max lorsqu'il s'agit de flotteurs?

SELECT max(val_amd) FROM `best_deposits` 

J'ai la valeur maximale dans le tableau égal à 14,6 (les champs est de type float),

Mais il retourne 14.3599996566772

pourquoi se fait-il, et comment puis-je obtenir la valeur exacte?

Merci beaucoup

+0

J'espère que vous vouliez dire que vous avez stocké 14.36 dans le domaine ... –

+0

s'il vous plaît voir ma modification et le providet liens – oezi

Répondre

2

flotteurs sont mauvais!

NE JAMAIS utiliser pour stocker des quantités ou des prix. Au lieu de cela, utilisez un int et stockez le montant en cents. C'est le seulement façon de contourner ces problèmes pour toujours.

pourquoi cela se produit: parce que floatsne peut pas être sauvé exactement dans de nombreux cas (par exemple 0,6 dans votre cas)

PS: nous avons eu ces questions une fois de hundret pour différentes langues jusqu'à présent:

EDIT: à votre commentaire: comme je l'ai dit:

utiliser un int et stocker le montant cents

(Sinon, vous pouvezutiliser un DECIMAL (10,2) (ou la taille/combien décimales vous avez besoin) ... pas sûr de la façon dont cela fonctionne)

+0

alors, comment puis-je stocker la valeur float dans la table? Quel type dois-je utiliser? (Il est ennuyeux d'avoir deux champs pour chaque valeur: /) – Simon

+0

s'il vous plaît voir mon édition et les liens fournis – oezi

1

Ou mieux utiliser « décimal » avec longueur 10,2 ou quelque chose comme ça pour stocker les prix.

+0

double est toujours une valeur à virgule flottante. Faire une longueur d'affichage de 10,2 ne changera pas les problèmes d'arrondis avec les flottants. Tout au plus, il va juste les cacher et conduire à une plus grande confusion lors du débogage. –

+0

Mon erreur. Je voulais dire décimal (10,2) comme @oezi a écrit. –