Mysql
 sql >> база данни >  >> RDS >> Mysql

Проблеми при сравнение на MySQL с плаваща запетая

Забелязвате ли проблема по-долу?

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

Има допълнително 0.00000005722 разпределени между някои от тези редове. Следователно някои от тези стойности ще върнат false в сравнение със стойността, с която са били инициализирани.

За да избегнете проблеми с аритметиката с плаваща запетая и сравненията, трябва да използвате DECIMAL тип данни:

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да деактивирате проверката на чужд ключ в MySQL

  2. Как работи операторът RLIKE в MySQL

  3. Използване на Like в MySQL за операции за търсене с помощта на шаблон

  4. Как да изчислим месечно активни потребители (MAU) в MySQL

  5. Как да закръглите клеймо за време в MySQL