sql >> Database teknologi >  >> RDS >> Mysql

Problemer med sammenligning af MySQL flydende komma

Lægger du mærke til problemet nedenfor?

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

Der er en ekstra 0.00000005722 spredt mellem nogle af disse rækker. Derfor vil nogle af disse værdier returnere falsk, når de sammenlignes med den værdi, de blev initialiseret med.

For at undgå problemer med flydende komma-aritmetik og sammenligninger, bør du bruge DECIMAL datatype:

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. oracle diff:hvordan man sammenligner to tabeller?

  2. Liste lagrede funktioner, der refererer til en tabel i PostgreSQL

  3. Sidste ord i en sætning:I SQL (regulære udtryk muligt?)

  4. Hvad er forskellen mellem Office 365 og Office 2016?