DECIMAL(M,D) দিয়ে সঠিক প্রিসিশন
DECIMAL(M,D)-এ M=মোট ডিজিট, D=দশমিকের পরে ডিজিট। D না দিলে (DECIMAL(7)) ডিফল্ট D=0 হয়, ফলে রাউন্ড হয়ে ইন্টিজার হয়ে যায়।
উদাহরণ: রাউন্ডিং সমস্যা
টেবিল (DECIMAL(7) - D=0)
mysql> create table stopRoundingDemo (
-> Amount DECIMAL(7)
-> );
Query OK, 0 rows affected (0.67 sec)
mysql> insert into stopRoundingDemo values(7836.783);
Query OK, 1 row affected, 1 warning (0.43 sec)
mysql> insert into stopRoundingDemo values(1737.67);
Query OK, 1 row affected, 1 warning (0.23 sec)
mysql> insert into stopRoundingDemo values(110.50);
Query OK, 1 row affected, 1 warning (0.33 sec)
ডেটা (রাউন্ড হয়েছে)
mysql> SELECT * FROM stopRoundingDemo;
আউটপুট
+--------+ | Amount | +--------+ | 7837 | | 1738 | | 111 | +--------+
সমাধান: DECIMAL(10,4) ব্যবহার
নতুন টেবিল
mysql> create table stopRoundingDemo2 (
-> Amount DECIMAL(10,4)
-> );
Query OK, 0 rows affected (0.81 sec)
mysql> insert into stopRoundingDemo2 values(7836.783);
Query OK, 1 row affected (0.14 sec)
mysql> insert into stopRoundingDemo2 values(1737.67);
Query OK, 1 row affected (0.14 sec)
mysql> insert into stopRoundingDemo2 values(110.50);
Query OK, 1 row affected (0.16 sec)
ডেটা (রাউন্ড নেই)
mysql> SELECT * FROM stopRoundingDemo2;
আউটপুট
+-----------+ | Amount | +-----------+ | 7836.7830 | | 1737.6700 | | 110.5000 | +-----------+
সেরা অনুশীলন: আর্থিক ডেটার জন্য সবসময় DECIMAL(M,D) স্পেসিফাই করুন। FLOAT/DOUBLE এয়োয়ারিং এরর দেয়। M হলো মোট ডিজিট (দশমিক সহ), D দশমিকের পরে ডিজিট।