क्या आपको नीचे दी गई समस्या दिखाई देती है?
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)