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

Data Type MySQL สำหรับเก็บเลขทศนิยมยาว (High Precision Decimal)

ใช้ DECIMAL(21,20) สำหรับความแม่นยำสูงสุด

ชนิดข้อมูล DECIMAL(M,D) เหมาะสำหรับเก็บตัวเลขทศนิยมที่ต้องการความแม่นยำสูง (Exact Value) โดยไม่มีปัญหาการปัดเศษแบบ Floating Point

  • M (Precision): จำนวนหลักทั้งหมด (รวมทั้งฝั่งซ้ายและขวาจุดทศนิยม) สูงสุด 65
  • D (Scale): จำนวนหลักทางด้านขวาจุดทศนิยม สูงสุด 30

ตัวอย่าง: DECIMAL(21,20) = 1 หลักฝั่งซ้าย + 20 หลักฝั่งขวา

mysql> CREATE TABLE DemoTable1493 (
    -> LongValue DECIMAL(21,20)
    -> );
Query OK, 0 rows affected (0.48 sec)

mysql> INSERT INTO DemoTable1493 VALUES
    -> (1.0047464644664677373),
    -> (5.999999484757773),
    -> (0.009994995885885);
Query OK, 3 rows affected

ผลลัพธ์ (MySQL จะเติมศูนย์ท้ายให้ครบ 20 ตำแหน่ง)

+------------------------+
| LongValue              |
+------------------------+
| 1.00474646446646773730 |
| 5.99999948475777300000 |
| 0.00999499588588500000 |
+------------------------+

ตารางเปรียบเทียบชนิดข้อมูลตัวเลข

ชนิดข้อมูลความแม่นยำเหมาะสำหรับ
DECIMAL(M,D)Exact (แม่นยำสมบูรณ์)เงิน, การคำนวณทางการเงิน, วิทยาศาสตร์
FLOATApproximate (~7 digits)ค่าทางวิทยาศาสตร์ที่ยอมรับความคลาดเคลื่อนได้
DOUBLEApproximate (~15 digits)ค่าทางวิทยาศาสตร์ ต้องการช่วงกว้างกว่า FLOAT

เคล็ดลับการเลือก M และ D

  • สำหรับเงิน: DECIMAL(19,4) หรือ DECIMAL(10,2) (ดูบทความถัดไป)
  • สำหรับพิกัด GPS: DECIMAL(10,7) หรือ DECIMAL(11,8)
  • สูตร: M = (จำนวนหลักสูงสุดฝั่งซ้าย) + D
  • MySQL จัดเก็บ DECIMAL เป็น Binary Coded Decimal (4 bits ต่อหลัก) ประหยัดพื้นที่