J'essaie de faire une correspondance SELECT
sur une table en fonction d'un identifiant et d'un prix, tels que:
SELECT * FROM `table` WHERE `ident`='ident23' AND `price`='101.31';
Ce qui précède ne renvoie aucune ligne, tandis que si vous supprimez le bit price='101.31'
, il renvoie la ligne correcte.
Faire un ...
SELECT * FROM `table`;
Renvoie la même ligne que ci-dessus et indique très clairement que price='101.31'
. Pourtant, sélectionner ne correspond pas. Changer =
en <=
le fait fonctionner - mais ce n'est pas exactement une solution.
Existe-t-il un moyen de convertir le flottant MySQL en deux chiffres avant que l'opération ne soit effectuée, rendant ainsi la SELECT
ci-dessus fonctionnelle (ou une autre solution)?
Merci!
Couler en décimale a fonctionné pour moi:
SELECT * FROM table WHERE CAST(price AS DECIMAL) = CAST(101.31 AS DECIMAL);
Cependant, vous voudrez peut-être simplement commencer par transformer la colonne price
en DECIMAL. DECIMAL est généralement considéré comme le meilleur type à utiliser pour traiter les valeurs monétaires.
Cela ne fonctionne pas car un float est intrinsèquement imprécis. La valeur réelle est probablement quelque chose comme '101.3100000000001'. Vous pouvez d'abord utiliser ROUND () pour l'arrondir à 2 endroits ou, mieux encore, utiliser un type DECIMAL au lieu d'un float.
N'utilisez jamais de flotteurs pour de l'argent.
Aujourd'hui, je suis également tombé dans la même situation et je résous en utilisant simplement la fonction FORMAT de MySQL. Il renverra les résultats qui correspondent exactement à votre clause WHERE.
SELECT * FROM yourtable WHERE FORMAT(col,2) = FORMAT(value,2)
Explication: FORMAT('col name', precision of floating point number)
Essayez ceci: SELECT * FROM table WHERE prix comme 101.31 ;
Je cherchais une solution, mais finalement je l’ai fait en utilisant mon précédent php number_format (), qui était venu voir la solution de @ hmasif.
Utilisez ceci et vous obtiendrez votre correspondance float - mysql:
$floatmatch = number_format((float)$yourfloatvariable,5);
où 5 est cinq chaînes du point décimal. par exemple. 7.93643