sql >> Databáze >  >> RDS >> Mysql

Problémy s porovnáním MySQL s pohyblivou řádovou čárkou

Všimli jste si níže uvedeného problému?

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

Je tam navíc 0.00000005722 mezi některé z těchto řádků. Proto některé z těchto hodnot vrátí hodnotu false ve srovnání s hodnotou, se kterou byly inicializovány.

Abyste se vyhnuli problémům s aritmetikou a porovnáváním s plovoucí desetinnou čárkou, měli byste použít DECIMAL datový typ:

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. Jak používat JDBC k připojení databáze MySql

  2. Síťový adaptér nemohl navázat připojení při připojování k Oracle DB

  3. Nalezení dalšího dostupného ID v MySQL

  4. Jak implementovat LIMIT s SQL Server?