Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Vấn đề so sánh dấu phẩy động MySQL

Bạn có nhận thấy vấn đề bên dưới không?

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

Có thêm một 0.00000005722 trải giữa một số hàng đó. Do đó, một số giá trị đó sẽ trả về false khi so sánh với giá trị mà chúng được khởi tạo.

Để tránh các vấn đề với số học và so sánh dấu phẩy động, bạn nên sử dụng DECIMAL kiểu dữ liệu:

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. Các chỉ mục MySQL hoạt động như thế nào?

  2. FROM_UNIXTIME () Ví dụ - MySQL

  3. Tạo một chuỗi ngày

  4. MySql nhận hồ sơ hoặc dữ liệu theo hàng ngày, hàng tuần, hàng tháng và hàng năm

  5. Viết các tham số tùy chọn trong các thủ tục được lưu trữ trong MySQL?