Tôi sẽ có lập trường ngược lại.
FLOATdành cho các số gần đúng, chẳng hạn như tỷ lệ phần trăm, trung bình, v.v. Bạn nên định dạng khi bạn hiển thị các giá trị, trong mã ứng dụng hoặc sử dụng FORMAT()chức năng của MySQL.
Đừng bao giờ thử nghiệm float_value = 1.3; có nhiều lý do tại sao điều đó sẽ thất bại.
DECIMALnên được sử dụng cho các giá trị tiền tệ. DECIMALtránh làm tròn số thứ hai khi giá trị cần được làm tròn thành đô la / xu / euro / v.v. Kế toán không thích phân số xu.
Việc triển khai của MySQL DECIMALcho phép 65 chữ số có nghĩa; FLOATđưa ra khoảng 7 và DOUBLEkhoảng 16. 7 thường là quá đủ cho các cảm biến và tính toán khoa học.
Còn về "phần trăm" - Đôi khi tôi đã sử dụng TINYINT UNSIGNEDkhi tôi chỉ muốn sử dụng 1 byte dung lượng lưu trữ và không cần nhiều độ chính xác; đôi khi tôi đã sử dụng FLOAT(4 byte). Không có kiểu dữ liệu được điều chỉnh cụ thể cho tỷ lệ phần trăm. (Cũng lưu ý rằng DECIMAL(2,0)không thể giữ giá trị 100, vì vậy về mặt kỹ thuật bạn sẽ cần DECIMAL(3,0).)
Hoặc đôi khi tôi đã sử dụng FLOATgiá trị giữ từ 0 đến 1. Nhưng sau đó tôi sẽ cần đảm bảo nhân với 100 trước khi hiển thị "phần trăm".
Hơn
Tất cả ba "tỷ lệ phần trăm, trung bình, tỷ lệ" giống như phao, vì vậy đó sẽ là lựa chọn đầu tiên của tôi.
Một tiêu chí để quyết định kiểu dữ liệu ... Sẽ tồn tại bao nhiêu bản sao của giá trị?
Nếu bạn có một bảng hàng tỷ với một cột cho tỷ lệ phần trăm, hãy xem xét rằng TINYINTsẽ mất 1 byte (tổng cộng 1 GB), nhưngFLOAT sẽ mất 4 byte (tổng cộng 4GB). OTOH, hầu hết các ứng dụng không có nhiều hàng, vì vậy điều này có thể không liên quan.
Theo quy tắc 'chung', các giá trị "chính xác" nên sử dụng một số dạng INThoặc DECIMAL. Những thứ không chính xác (tính toán khoa học, căn bậc hai, phép chia, v.v.) nên sử dụng FLOAT(hoặc DOUBLE).
Hơn nữa, định dạng của đầu ra thường nên được đặt ở mặt trước của ứng dụng. Đó là, mặc dù "mức trung bình" có thể tính thành "14.6666666 ...", màn hình sẽ hiển thị giống như "14.7"; điều này thân thiện hơn với con người Trong khi đó, bạn có giá trị cơ bản để sau đó quyết định rằng "15" hoặc "14.667" là định dạng đầu ra thích hợp hơn.
Phạm vi "0,00 - 100,00" có thể được thực hiện bằng FLOAT và sử dụng định dạng đầu ra hoặc với DECIMAL(5,2)(3 byte) với xác định trước mà bạn sẽ luôn muốn độ chính xác được chỉ định .