sql >> Databasteknik >  >> RDS >> Mysql

MySQL flyttal jämförelse problem

Lägger du märke till problemet nedan?

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

Det finns en extra 0.00000005722 spridning mellan några av dessa rader. Därför kommer vissa av dessa värden att returnera falskt jämfört med värdet de initierades med.

För att undvika problem med aritmetik med flyttal och jämförelser bör du använda DECIMAL datatyp:

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. Hur SESSION_CONTEXT() fungerar i SQL Server

  2. En titt på Oracle Group-by Bug

  3. Zombie PerfMon-räknare som aldrig dör!

  4. SQL Server Failover Cluster Installation -4