Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> MySQL

MySQL में FLOAT के बजाय DECIMAL डेटा प्रकार का उपयोग करके सटीक दशमलव संग्रहण

MySQL में FLOAT और DOUBLE फ्लोटिंग-पॉइंट प्रकार हैं जो परिशुद्धता समस्याएं पैदा कर सकते हैं। सटीक दशमलव मानों (विशेषकर वित्तीय डेटा) के लिए DECIMAL(precision, scale) का उपयोग करें।

समस्या: FLOAT परिशुद्धता

mysql> CREATE TABLE test_float (val FLOAT);
mysql> INSERT INTO test_float VALUES (0.1), (0.2), (0.3);
mysql> SELECT * FROM test_float;
+-------+
| val   |
+-------+
| 0.1   |
| 0.2   |
| 0.3   |
+-------+
mysql> SELECT SUM(val) FROM test_float;
+--------------------+
| SUM(val)           |
+--------------------+
| 0.6000000238418579 |  -- 0.6 नहीं!
+--------------------+

समाधान: DECIMAL उपयोग करें

सिंटैक्स

DECIMAL(precision, scale)
-- precision: कुल अंक (1-65)
-- scale: दशमलव के बाद के अंक (0-30, precision ≤ scale)

व्यावहारिक उदाहरण

mysql> CREATE TABLE DemoTable (Amount DECIMAL(10,2));
Query OK, 0 rows affected (0.54 sec)

mysql> INSERT INTO DemoTable VALUES 
(2194848.90), (90309393.79), (8999999.68), (90900000.99);
Query OK, 4 rows affected (0.25 sec)

mysql> SELECT * FROM DemoTable;
+-------------+
| Amount      |
+-------------+
| 2194848.90  |
| 90309393.79 |
| 8999999.68  |
| 90900000.99 |
+-------------+
4 rows in set (0.00 sec)

mysql> SELECT SUM(Amount) FROM DemoTable;
+-----------------+
| SUM(Amount)     |
+-----------------+
| 191407843.36    |  -- सटीक!
+-----------------+

DECIMAL vs FLOAT/DOUBLE

विशेषताDECIMALFLOAT/DOUBLE
संग्रहणसटीक निश्चित-बिंदुसन्निकट फ्लोटिंग-पॉइंट
परिशुद्धतासटीक (निर्दिष्ट स्केल तक)गोलाई त्रुटियाँ संभव
सीमा65 अंक तकबहुत बड़ी सीमा
प्रदर्शनथोड़ा धीमातेज़ (हार्डवेयर समर्थन)
उपयोग मामलापैसा, माप, सटीक गणनावैज्ञानिक, सांख्यिकीय, ग्राफिक्स

सामान्य DECIMAL परिभाषाएँ

उपयोगपरिभाषासीमा
मुद्रा (2 दशमलव)DECIMAL(10,2)-99,999,999.99 से 99,999,999.99
मुद्रा (4 दशमलव)DECIMAL(15,4)विनिमय दरों के लिए
प्रतिशतDECIMAL(5,2)-999.99% से 999.99%
निर्देशांकDECIMAL(10,7)GPS निर्देशांक
बड़ी मात्राDECIMAL(20,2)कॉर्पोरेट वित्त

मौजूदा FLOAT कॉलम को DECIMAL में बदलें

-- 1. नया कॉलम जोड़ें
ALTER TABLE DemoTable ADD Amount_decimal DECIMAL(10,2);

-- 2. डेटा कॉपी करें (सावधानी: फ्लोट त्रुटियाँ आ सकती हैं)
UPDATE DemoTable SET Amount_decimal = ROUND(Amount, 2);

-- 3. सत्यापित करें
SELECT Amount, Amount_decimal FROM DemoTable;

-- 4. स्विच करें
ALTER TABLE DemoTable DROP COLUMN Amount;
ALTER TABLE DemoTable CHANGE Amount_decimal Amount DECIMAL(10,2);

सर्वोत्तम अभ्यास

  • पैसे के लिए हमेशा DECIMAL - कभी भी FLOAT/DOUBLE न उपयोग करें
  • पर्याप्त precision चुनें (अधिकतम अपेक्षित मान + 2)
  • एप्लिकेशन लेयर पर भी DECIMAL/BigDecimal उपयोग करें
  • JSON में संख्याओं को स्ट्रिंग के रूप में भेजें
  1. आईट्यून्स  कुड नॉट कनेक्ट टू दिस आईफोन  एरर कैसे ठीक करें आईट्यून्स 'कुड नॉट कनेक्ट टू दिस आईफोन' एरर कैसे ठीक करें

    आईट्यून्स को मैकओएस कैटालिना में रिटायर कर दिया गया हो, लेकिन कई आईफोन यूज़र्स के लिए यह अपने डिवाइस पर संगीत और अन्य डेटा को ले जाने या अपने पीसी या मैक पर स्टोर किए जा सकने वाले बैकअप बनाने का एक विश्वसनीय तरीका बना हुआ है। हालांकि, यह बाधित हो सकता है, यदि आपको संदेश दिखाई देता है आईट्यून्स कुड न

  1. Windows 10 पासवर्ड स्वीकार न करने की समस्या को कैसे ठीक करें Windows 10 पासवर्ड स्वीकार न करने की समस्या को कैसे ठीक करें

    कुछ Windows 10 उपयोगकर्ता रिपोर्ट कर रहे हैं कि वे प्रारंभिक लॉगिन स्क्रीन द्वारा उनका पासवर्ड स्वीकार न करने के बाद अपने Windows 10 कंप्यूटर में लॉग इन करने में असमर्थ हैं। अधिकांश उपयोगकर्ता कह रहे हैं कि वे निश्चित हैं कि वे जो पासवर्ड टाइप कर रहे हैं वह 100% सही है। कुछ उपयोगकर्ता रिपोर्ट कर रहे

  1. macOS पर AppleAPFSMedia नॉट माउंटेड त्रुटि की मरम्मत करें - डेटा सुरक्षित रूप से पुनर्स्थापित करें macOS पर AppleAPFSMedia नॉट माउंटेड त्रुटि की मरम्मत करें - डेटा सुरक्षित रूप से पुनर्स्थापित करें

    सारांश: यहां macOS Catalina 10.15/Mojave 10.14/High Sierra 10.13 पर AppleAPFSMedia नॉट माउंटेड मुद्दे को ठीक करने और अनमाउंटेबल AppleAPFSMedia से खोए हुए डेटा को रिकवर करने का ट्यूटोरियल है।विषय सूची:1. डेटा हानि के बिना AppleAPFSMedia नॉट माउंटेड को कैसे ठीक करें?जब भी आप एक APFS कंटेनर जोड़ते