Ist Ihnen das untenstehende Problem aufgefallen?
CREATE TABLE a (num float);
INSERT INTO a VALUES (50.12);
INSERT INTO a VALUES (34.57);
INSERT INTO a VALUES (12.75);
INSERT INTO a VALUES (11.22);
INSERT INTO a VALUES (10.46);
INSERT INTO a VALUES (9.35);
INSERT INTO a VALUES (8.55);
INSERT INTO a VALUES (7.23);
INSERT INTO a VALUES (6.53);
INSERT INTO a VALUES (5.15);
INSERT INTO a VALUES (4.01);
SELECT SUM(num) FROM a;
+-----------------+
| SUM(num) |
+-----------------+
| 159.94000005722 |
+-----------------+
Es gibt einen zusätzlichen 0.00000005722
zwischen einigen dieser Reihen verteilen. Daher geben einige dieser Werte falsch zurück, wenn sie mit dem Wert verglichen werden, mit dem sie initialisiert wurden.
Um Probleme mit Fließkommaarithmetik und Vergleichen zu vermeiden, sollten Sie DECIMAL
verwenden Datentyp:
ALTER TABLE a MODIFY num DECIMAL(6,2);
SELECT SUM(num) FROM a;
+----------+
| SUM(num) |
+----------+
| 159.94 |
+----------+
1 row in set (0.00 sec)