ฉันจะใช้ท่าทางตรงข้าม
FLOAT
สำหรับตัวเลขโดยประมาณเช่นเปอร์เซ็นต์ค่าเฉลี่ยเป็นต้นคุณควรทำการฟอร์แมตเมื่อคุณแสดงค่าทั้งในรหัสแอพหรือใช้FORMAT()
ฟังก์ชั่นของ MySQL
ไม่เคยทดสอบfloat_value = 1.3
; มีสาเหตุหลายประการที่จะล้มเหลว
DECIMAL
ควรใช้สำหรับค่าเงิน DECIMAL
หลีกเลี่ยงการปัดเศษครั้งที่สองเมื่อค่าต้องถูกปัดเศษเป็นดอลลาร์ / เซนต์ / ยูโร / ฯลฯ นักบัญชีไม่ชอบเศษของเซนต์
การติดตั้งใช้งานของ MySQL DECIMAL
อนุญาตให้มี 65 หลักสำคัญ; FLOAT
ให้ประมาณ 7 และDOUBLE
ประมาณ 16 7 มักจะเกินพอสำหรับเซ็นเซอร์และการคำนวณทางวิทยาศาสตร์
สำหรับ "เปอร์เซนต์" - บางครั้งฉันก็ใช้TINYINT UNSIGNED
เมื่อฉันต้องการใช้พื้นที่จัดเก็บเพียง 1 ไบต์และไม่ต้องการความแม่นยำมากนัก บางครั้งฉันเคยใช้FLOAT
(4 ไบต์) ไม่มีการปรับประเภทข้อมูลเป็นเปอร์เซ็นต์ (หมายเหตุด้วยที่DECIMAL(2,0)
ไม่สามารถเก็บค่า100
ได้ดังนั้นคุณจำเป็นต้องมีเทคนิคDECIMAL(3,0)
)
หรือบางครั้งฉันได้ใช้ค่าFLOAT
ที่มีค่าอยู่ระหว่าง 0 ถึง 1 แต่จากนั้นฉันต้องตรวจสอบให้แน่ใจว่าคูณด้วย 100 ก่อนที่จะแสดง "เปอร์เซ็นต์"
มากกว่า
ทั้งสามของ "เปอร์เซ็นต์, เฉลี่ย, อัตรา" กลิ่นเหมือนลอยดังนั้นนั่นจะเป็นตัวเลือกแรกของฉัน
เกณฑ์หนึ่งสำหรับการตัดสินใจเลือกประเภทข้อมูล ... จะมีสำเนาของค่ากี่ชุด?
หากคุณมีตารางพันล้านแถวที่มีคอลัมน์คิดเป็นเปอร์เซ็นต์ให้พิจารณาว่าTINYINT
จะมีขนาด 1 ไบต์ (ทั้งหมด 1GB) แต่FLOAT
จะมีขนาด 4 ไบต์ (รวม 4GB) OTOH แอปพลิเคชันส่วนใหญ่ไม่มีแถวจำนวนมากดังนั้นสิ่งนี้อาจไม่เกี่ยวข้อง
ตามกฎ 'ทั่วไป' "แน่นอน" คุณค่าควรใช้รูปแบบของบางส่วนหรือINT
DECIMAL
สิ่งที่ไม่แน่นอน (การคำนวณทางวิทยาศาสตร์รากที่สองการหาร ฯลฯ ) ควรใช้FLOAT
(หรือDOUBLE
)
นอกจากนี้การจัดรูปแบบของผลลัพธ์มักจะถูกทิ้งไว้ที่ส่วนหน้าของแอปพลิเคชัน นั่นคือแม้ว่า "เฉลี่ย" อาจคำนวณเป็น "14.6666666 ... " จอแสดงผลควรแสดงบางอย่างเช่น "14.7"; นี่เป็นมิตรต่อมนุษย์ ในขณะเดียวกันคุณมีค่าอ้างอิงเพื่อตัดสินใจในภายหลังว่า "15" หรือ "14.667" เป็นรูปแบบเอาต์พุตที่นิยม
ช่วง "0.00 - 100.00" สามารถทำได้ด้วยFLOAT
และใช้การจัดรูปแบบเอาต์พุตหรือDECIMAL(5,2)
(3 ไบต์) ด้วยการกำหนดล่วงหน้าที่คุณจะต้องการความแม่นยำที่ระบุไว้เสมอ