Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Probleme beim MySQL-Gleitkommavergleich

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)