ทำไมไม่ควรใช้ FLOAT/DOUBLE
ชนิด Floating Point มี Percision Error (ข้อผิดพลาดการปัดเศษ) เช่น 0.1 + 0.2 ≠ 0.3 ใน Binary Floating Point
แนะนำ: DECIMAL หรือ NUMERIC
- เก็บค่าทศนิยมได้แม่นยำ (Exact Precision)
- รูปแบบ:
DECIMAL(precision, scale) precision: จำนวนหลักทั้งหมด (สูงสุด 65)scale: จำนวนหลักทศนิยม
ตัวอย่าง
สร้างตาราง
mysql> create table MoneyStorageDemo (Amount DECIMAL(4,2));
เพิ่มข้อมูล
mysql> insert into MoneyStorageDemo values(50.2),(5.50),(10.4);
แสดงผล
mysql> select * from MoneyStorageDemo;
+--------+ | Amount | +--------+ | 50.20 | | 5.50 | | 10.40 | +--------+
แนวทางเลือก Precision/Scale
| ใช้งาน | แนะนำ |
|---|---|
| เงินทั่วไป (บาท/สตางค์) | DECIMAL(10,2) หรือ DECIMAL(12,2) |
| สกุลเงิน 3 ทศนิยม (เช่น JOD, KWD) | DECIMAL(10,3) |
| Crypto/Stock (หลายทศนิยม) | DECIMAL(20,8) หรือมากกว่า |
| Accounting/Finance | DECIMAL(19,4) (มาตรฐานหลายระบบ) |
สรุป: ใช้ DECIMAL/NUMERIC สำหรับเงินทุกกรณี หลีกเลี่ยง FLOAT/DOUBLE อย่างสมบูรณ์