Hallo,
ich habe in meiner Tabelle ‚tabelle‘ eine Spalte „price“ , Typ float.
Bei „SELECT * FROM tabelle WHERE price = 12.99;“ ist das Ergebnis . Obwohl es jede Menge Einträge 12.99 gibt.
Wie kommt das?
Gruß
Hallo,
ich habe in meiner Tabelle ‚tabelle‘ eine Spalte „price“ , Typ float.
Bei „SELECT * FROM tabelle WHERE price = 12.99;“ ist das Ergebnis . Obwohl es jede Menge Einträge 12.99 gibt.
Wie kommt das?
Gruß
Auch hallo.
Bei „SELECT * FROM tabelle WHERE price = 12.99;“ ist das
Ergebnis . Obwohl es jede Menge Einträge
12.99 gibt.
Mit MySQL funktioniert das jedenfalls
Als Abhilfe könnte man es mit „SELECT * FROM tabelle WHERE price between 12 AND 13;“ versuchen.
mfg M.L.
Hi,
ich hab ja MYSQL…
danke, deine Alternative funktioniert.
Aber daß es bei Kommazahlen nicht klappt ist schon seltsam.
Gruß, Andreas
[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]
Es geht auch
Es geht auch
SELECT * FROM tabelle WHERE price like 12.99
Und nimm lieber Dezimal bei Mysql
siehe http://forum.de.selfhtml.org/archiv/2004/12/t97657/
Zumal ein Float 12.99 nicht ein Dezimal 12.99 ist
kann also mit = eben kein gleich herauskommen.
Mit like wirds angepasst , dennoch ist float wenig geeignet zum rechnen.
Beispiel :
mysql\> SELECT i, ROUND(SUM(d1), 2) AS a, ROUND(SUM(d2), 2) AS b
-\> FROM t1 GROUP BY i HAVING a b;
+------+--------+-------+
| i | a | b |
+------+--------+-------+
| 1 | 21.40 | 21.40 |
| 2 | 76.80 | 76.80 |
| 3 | 7.40 | 7.40 |
| 4 | 15.40 | 15.40 |
| 5 | 7.20 | 7.20 |
| 6 | -51.40 | 0.00 |
+------+--------+-------+
This is what the numbers in column a look like when displayed with more decimal places:
mysql\> SELECT i, ROUND(SUM(d1), 2)\*1.0000000000000000 AS a,
-\> ROUND(SUM(d2), 2) AS b FROM t1 GROUP BY i HAVING a b;
+------+----------------------+-------+
| i | a | b |
+------+----------------------+-------+
| 1 | 21.3999999999999986 | 21.40 |
| 2 | 76.7999999999999972 | 76.80 |
| 3 | 7.4000000000000004 | 7.40 |
| 4 | 15.4000000000000004 | 15.40 |
| 5 | 7.2000000000000002 | 7.20 |
| 6 | -51.3999999999999986 | 0.00 |
Moin, Andreas,
Bei „SELECT * FROM tabelle WHERE price = 12.99;“ ist das
Ergebnis .
jedes andere Resultat wäre ein Wunder: Floatzahlen hören nicht nach der zweiten Stelle auf, ein .99 ist gar nicht darstellbar. Nimm Decimal (oder Integer, je nach Anwendung) als Datentyp.
Obwohl es jede Menge Einträge 12.99 gibt.
Das sieht nur so aus ))
Gruß Ralf