La sélection d'un flotteur dans MySQL
Je suis en train de faire un SELECT
match sur un tableau basé sur un identifiant et un prix, tels que:
SELECT * FROM `table` WHERE `ident`='ident23' AND `price`='101.31';
Ci-dessus renvoie zéro lignes, tandis que si vous retirez le price='101.31'
peu qu'il retourne la ligne correcte.
Faire un...
SELECT * FROM `table`;
Renvoie la même ligne comme ci-dessus et, très clairement, les états qui price='101.31'
. Pourtant, sélectionnez échoue pour le match. Changer =
à <=
permet de travailler - mais ce n'est pas exactement une solution.
Est-il un moyen de la coulée de la base de flotter à 2 chiffres avant l'opération est effectuée sur elle, ce qui rend le dessus SELECT
de travail (ou une autre solution)?
Merci!
Vous devez vous connecter pour publier un commentaire.
La conversion en décimal a fonctionné pour moi:
Cependant, vous pouvez envisager de faire de la
price
colonne DECIMAL en premier lieu. VIRGULE est généralement considéré comme le meilleur type à utiliser pour traiter avec des valeurs monétaires.DECIMAL(M,D)
.CAST(101.31 AS DECIMAL) = 101
Cela ne fonctionne pas car un flotteur est par nature imprécise. La valeur réelle est probablement quelque chose comme "101.3100000000001' Vous pouvez utiliser ROUND() sur la première ronde à 2 endroits, ou mieux encore, utiliser un type DÉCIMAL au lieu d'un flotteur.
Ne jamais utiliser des flotteurs pour de l'argent.
Aujourd'hui, je suis également venu à travers la même situation et se résoudre simplement en utilisant la fonction FORMAT de MySQL, Il sera de retour les résultats correspondant exactement à votre clause where.
Explication:
FORMAT('col name', precision of floating point number)
J'étais à la recherche d'une solution, mais finalement je l'ai fait à l'aide de mon précédent php number_format() qui est venu en voyant @hmasif de la solution.
L'utiliser et vous aurez votre float - mysql match:
où 5 est de cinq chaînes de point décimal. par exemple, 7.93643
Essayez ceci: SÉLECTIONNEZ * à PARTIR de table OÙ prix comme à 101,31;
price
est 101.30999439245Peut-être quelque chose le long de ces lignes:
Fait ce travail?