sql >> Database >  >> RDS >> Mysql

Problemen met MySQL-drijvende-kommavergelijking

Merkt u het onderstaande probleem op?

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 | 
+-----------------+

Er is een extra 0.00000005722 verspreid tussen sommige van die rijen. Daarom zullen sommige van die waarden false retourneren in vergelijking met de waarde waarmee ze zijn geïnitialiseerd.

Om problemen met drijvende-kommaberekeningen en vergelijkingen te voorkomen, moet u de DECIMAL gebruiken gegevenstype:

ALTER TABLE a MODIFY num DECIMAL(6,2);

SELECT SUM(num) FROM a;
+----------+
| SUM(num) |
+----------+
|   159.94 | 
+----------+
1 row in set (0.00 sec)


  1. PostgreSQL GROUP BY anders dan MySQL?

  2. Laravel Welsprekend selecteer alle rijen met max created_at

  3. Oracle-aggregaat voor het samenvoegen van tekenreeksen met komma's en voor het schrijven van aangepaste aggregaten

  4. Kan een externe sleutel NULL en/of duplicaat zijn?