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

การจัดเก็บจำนวนเงินใน MySQL: ใช้ DECIMAL ไม่ใช่ FLOAT

ทำไมไม่ควรใช้ 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/FinanceDECIMAL(19,4) (มาตรฐานหลายระบบ)

สรุป: ใช้ DECIMAL/NUMERIC สำหรับเงินทุกกรณี หลีกเลี่ยง FLOAT/DOUBLE อย่างสมบูรณ์