Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> MySQL

วิธีใช้ MySQL DECIMAL สำหรับเก็บค่าทศนิยมแม่นยำ

DECIMAL(M, D) ใช้เก็บตัวเลขทศนิยมได้แม่นยำ (Exact Value) ไม่มีปัญหา Floating Point Error

  • M = จำนวนหลักทั้งหมด (Precision) สูงสุด 65
  • D = จำนวนหลักหลังจุดทศนิยม (Scale) สูงสุด 30 และ D ≤ M

ตัวอย่าง: เก็บเงินเดือน (สูงสุด 99,999.99)

mysql> CREATE TABLE EmployeeInformation (
    -> EmpId INT AUTO_INCREMENT PRIMARY KEY,
    -> EmpName VARCHAR(200),
    -> EmpSalary DECIMAL(7,2)  -- 7 หลักรวม 2 หลักทศนิยม
    -> );

ทดสอบ Insert

mysql> INSERT INTO EmployeeInformation (EmpName, EmpSalary) VALUES ('John', 6999999.50);
ERROR 1264 (22003): Out of range value for column 'EmpSalary' at row 1  -- เกิน 7 หลัก

mysql> INSERT INTO EmployeeInformation (EmpName, EmpSalary) VALUES ('John', 69999.50);  -- OK (5+2=7 หลัก)
mysql> INSERT INTO EmployeeInformation (EmpName, EmpSalary) VALUES ('Jane', 6999.50);   -- OK

ผลลัพธ์ (MySQL ปัดเศษอัตโนมัติ):

+-------+---------+-----------+
| EmpId | EmpName | EmpSalary |
+-------+---------+-----------+
| 1     | John    | 70000.00  |
| 2     | Jane    | 7000.00   |
+-------+---------+-----------+
แนวทางปฏิบัติ:
  • เงิน/สกุลเงิน: ใช้ DECIMAL(19,4) หรือ DECIMAL(10,2) ตามความต้องการ
  • ไม่ควรใช้ FLOAT/DOUBLE สำหรับเงิน (มีปัญหาความแม่นยำ)
  • ใน Application ให้ใช้ Library Decimal (เช่น Python decimal, Java BigDecimal) ก่อน Insert