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

MySQL กำหนดความแม่นยำ DOUBLE(length, decimals) UNSIGNED

ใช้ DOUBLE(M, D) UNSIGNED เพื่อกำหนดความแม่นยำ (Precision) และสเกล (Scale) ของตัวเลขทศนิยม พร้อมจำกัดให้เป็นค่าบวกเท่านั้น

ไวยากรณ์

CREATE TABLE table_name (
    column_name DOUBLE(M, D) [UNSIGNED] [ZEROFILL]
);
  • M (Precision): จำนวนตัวเลขทั้งหมด (รวมทั้งด้านซ้ายและขวาจุดทศนิยม) Max 255
  • D (Scale): จำนวนตัวเลขหลังจุดทศนิยม Max 30, ต้อง ≤ M
  • UNSIGNED: ไม่อนุญาตค่าติดลบ (0 ถึงค่าบวกสูงสุด)
  • ZEROFILL: เติม 0 นำหน้า (Implicit UNSIGNED)

ตัวอย่างการใช้งาน

1. สร้างตาราง DOUBLE(5,2) UNSIGNED

mysql> CREATE TABLE DemoTable1814 (
    Amount DOUBLE(5,2) UNSIGNED
);
Query OK, 0 rows affected (0.00 sec)

ความหมาย: ทั้งหมด 5 ตัวเลข, 2 ตำแหน่งทศนิยม → ด้านซ้ายจุดได้ 3 ตัว (0-999.99)

2. เพิ่มข้อมูล

mysql> INSERT INTO DemoTable1814 VALUES(1.98);
mysql> INSERT INTO DemoTable1814 VALUES(100.24);
mysql> INSERT INTO DemoTable1814 VALUES(198.50);

3. แสดงข้อมูล

mysql> SELECT * FROM DemoTable1814;
+--------+
| Amount |
+--------+
|   1.98 |
| 100.24 |
| 198.50 |
+--------+

ทดสอบขอบเขต (Boundary Test)

mysql> INSERT INTO DemoTable1814 VALUES(999.99);   -- ✅ Max: 999.99
mysql> INSERT INTO DemoTable1814 VALUES(1000.00); -- ❌ Error: Out of range
mysql> INSERT INTO DemoTable1814 VALUES(-1.00);   -- ❌ Error: UNSIGNED ไม่รับค่าติดลบ

DOUBLE vs DECIMAL

คุณสมบัติDOUBLE(M,D)DECIMAL(M,D)
การจัดเก็บ8 Bytes (Floating Point)Variable (~M/2 Bytes) (Fixed Point)
ความแม่นยำประมาณ 15-17 Significant Digitsแม่นยำสมบูรณ์ (Exact)
เหมาะสำหรับวิทยาศาสตร์, วิศวกรรม, ค่าที่ยอมรับความคลาดเคลื่อนได้เงิน, บัญชี, การคำนวณทางการเงิน
Roundingอาจมี Rounding Errorไม่มี Rounding Error

แนะนำ: ใช้ DECIMAL สำหรับเงิน/การเงิน

CREATE TABLE finance (
    amount DECIMAL(12,2) NOT NULL  -- รองรับถึง 999,999,999.99
);

สรุป

DOUBLE(5,2) UNSIGNED กำหนดได้สูงสุด 999.99 ไม่รับค่าติดลบ ใช้สำหรับค่าที่ยอมรับ Precision ประมาณการได้ สำหรับเงิน/บัญชี ต้องใช้ DECIMAL เท่านั้น