Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Masalah perbandingan titik mengambang MySQL

Apakah Anda memperhatikan masalah di bawah ini?

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

Ada tambahan 0.00000005722 menyebar di antara beberapa baris itu. Oleh karena itu beberapa dari nilai-nilai tersebut akan mengembalikan false jika dibandingkan dengan nilai yang diinisialisasi.

Untuk menghindari masalah dengan aritmatika floating-point dan perbandingan, Anda harus menggunakan DECIMAL tipe data:

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. Bagaimana cara saya membuat MySQL menggunakan INDEX untuk permintaan tampilan?

  2. Data MySQL - Cara terbaik untuk mengimplementasikan paging?

  3. Permintaan MySQL untuk mendapatkan nama kolom?

  4. Jenis di MySQL:BigInt(20) vs Int(20)

  5. Memilih semua kolom yang dimulai dengan XXX menggunakan karakter pengganti?