ฉันไม่สามารถเข้าใจถึงทศนิยมของ MySQL ได้ ฉันต้องการแถวเพื่อให้สามารถมีตัวเลขที่ใดก็ได้จาก 00.0001 ถึง 99.9999 ฉันจะจัดโครงสร้างให้ทำงานอย่างไร
ฉันไม่สามารถเข้าใจถึงทศนิยมของ MySQL ได้ ฉันต้องการแถวเพื่อให้สามารถมีตัวเลขที่ใดก็ได้จาก 00.0001 ถึง 99.9999 ฉันจะจัดโครงสร้างให้ทำงานอย่างไร
คำตอบ:
คอลัมน์ DOUBLE ไม่เหมือนกับคอลัมน์ DECIMAL และคุณจะพบปัญหาหากคุณใช้คอลัมน์ DOUBLE สำหรับข้อมูลทางการเงิน
DOUBLE เป็นจริงเป็นเพียงแค่ความแม่นยำสอง (64 บิตแทน 32 บิต) รุ่นFLOAT หมายเลขจุดลอยตัวเป็นตัวแทนโดยประมาณของจำนวนจริงและไม่แม่นยำ ในความเป็นจริงตัวเลขอย่างเช่น 0.01 ไม่มีการแทนค่าที่แน่นอนในประเภท FLOAT หรือ DOUBLE
คอลัมน์ DECIMAL เป็นการนำเสนอที่แน่นอน แต่ใช้พื้นที่มากขึ้นสำหรับช่วงที่มีจำนวนน้อยกว่ามาก ในการสร้างคอลัมน์ที่สามารถเก็บค่าได้ตั้งแต่ 0.0001 ถึง 99.9999 เช่นที่คุณถามคุณจะต้องมีข้อความสั่งต่อไปนี้
CREATE TABLE your_table
(
your_column DECIMAL(6,4) NOT NULL
);
นิยามคอลัมน์ตามรูปแบบ DECIMAL (M, D) โดยที่Mคือจำนวนหลักสูงสุด ( ความแม่นยำ ) และDคือจำนวนหลักทางด้านขวาของจุดทศนิยม ( มาตราส่วน )
ซึ่งหมายความว่าคำสั่งก่อนหน้านี้สร้างคอลัมน์ที่ยอมรับค่าจาก -99.9999 ถึง 99.9999 นอกจากนี้คุณยังสามารถสร้างคอลัมน์ DECIMAL ที่ไม่ได้ลงนามตั้งแต่ 0.0000 ถึง 99.9999
สำหรับข้อมูลเพิ่มเติมเกี่ยวกับ MySQL DECIMAL เอกสารอย่างเป็นทางการเป็นแหล่งข้อมูลที่ดีเสมอ
โปรดทราบว่าข้อมูลทั้งหมดนี้เป็นจริงสำหรับ MySQL เวอร์ชัน 5.0.3 ขึ้นไป หากคุณใช้เวอร์ชั่นก่อนหน้านี้คุณควรอัพเกรด
DECIMAL[(M[,D])] [UNSIGNED] [ZEROFILL]
ตกลง: มันจะส่งคืนข้อผิดพลาดนอกช่วงสำหรับค่าลบ คุณสามารถสร้าง FLOAT และ DOUBLE ที่ไม่ได้ลงนามเช่นเดียวกัน คู่มือ: dev.mysql.com/doc/refman/5.0/en/numeric-type-overview.html
แม้ว่าคำตอบข้างต้นดูเหมือนจะถูกต้อง แต่เป็นเพียงคำอธิบายง่ายๆเพื่อให้คุณเข้าใจว่ามันทำงานอย่างไร
สมมติว่าคอลัมน์ของคุณถูกตั้งค่าเป็น DECIMAL(13,4)
สมมติว่าคอลัมน์ของคุณจะกำหนดซึ่งหมายความว่าคอลัมน์จะมีขนาดรวม 13 หลักโดยที่ 4 ของเหล่านี้จะใช้สำหรับการแสดงที่มีความแม่นยำ
ดังนั้นโดยสรุปสำหรับคอลัมน์นั้นคุณจะต้องมีค่าสูงสุด: 999999999.9999
ข้อกำหนด MySQL 5.x สำหรับประเภทข้อมูลทศนิยมคือ:DECIMAL[(M[,D])] [UNSIGNED] [ZEROFILL]
สำหรับประเภทข้อมูลทศนิยมคือ:คำตอบข้างต้นเป็นความผิดในการบอกว่าไม่สามารถใช้ทศนิยมที่ไม่ได้ลงชื่อ
การกำหนดเขตข้อมูลที่ช่วยให้เพียงทศนิยมไม่ได้ลงนามที่มีความยาวรวมของ 6 หลัก 4 DECIMAL (6,4) UNSIGNED
แห่งซึ่งเป็นทศนิยมที่คุณจะใช้:
คุณสามารถสร้างประเภทข้อมูลที่ไม่ได้ลงนาม (เช่นไม่ใช่ลบ) ชนิดข้อมูลแบบลอยและแบบซ้อนได้