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 है उन पंक्तियों में से कुछ के बीच फैल गया। इसलिए उनमें से कुछ मान उस मूल्य के साथ तुलना करने पर झूठी वापसी करेंगे, जिसके साथ उन्हें प्रारंभ किया गया था।

फ्लोटिंग-पॉइंट अंकगणित और तुलना के साथ समस्याओं से बचने के लिए, आपको 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. MySQL में डेटा को नई तालिका में कॉपी करें

  3. MySQL में दो तालिकाओं से कैसे चयन करें, भले ही एक तालिका की सभी पंक्तियों में दूसरे में संवाददाता न हों?

  4. क्रॉन जॉब्स का उपयोग करके MySQL डेटाबेस का बैकअप कैसे लें

  5. MySQL में रैंडम पंक्तियों का चयन करना