MySQL-এ FLOAT/DOUBLE ফ্লোটিং-পয়েন্ট টাইপে প্রিসিশন সমস্যা হয়। টাকা-পয়সা বা এক্স্যাক্ট ডেসিমেলের জন্য DECIMAL(p,s) ব্যবহার করুন।
সমস্যা
mysql> CREATE TABLE t (amt FLOAT); INSERT INTO t VALUES (0.1), (0.2); SELECT * FROM t; -- 0.10000000149011612, 0.20000000298023224
সমাধান: DECIMAL(10,2)
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
ফলাফল (এক্স্যাক্ট)
mysql> SELECT * FROM DemoTable;
+-------------+ | Amount | +-------------+ | 2194848.90 | | 90309393.79 | | 8999999.68 | | 90900000.99 | +-------------+
DECIMAL(p,s) ব্যাখ্যা
p(precision) = মোট ডিজিট সংখ্যা (১-৬৫)s(scale) = দশমিকের পেছনের ডিজিট (০-৩০, p ≤ s)DECIMAL(10,2)→ ৯৯৯৯৯৯৯৯.৯৯ পর্যন্ত স্টোর করে- স্টোরেজ: প্রতি ৯ ডিজিটের জন্য ৪ বাইট (কম্প্যাক্ট)
কখন FLOAT/DOUBLE?
- বিজ্ঞানীয় ক্যালকুলেশন, গ্রাফিক্স, অপ্রক্সিমেট মান
- পারফরম্যান্স খুব জরুরি হলে (হার্ডওয়্যার অপ্টিমাইজড)