Tôi sẽ có lập trường ngược lại.
FLOAT
dà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.
DECIMAL
nên được sử dụng cho các giá trị tiền tệ. DECIMAL
trá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 DECIMAL
cho phép 65 chữ số có nghĩa; FLOAT
đưa ra khoảng 7 và DOUBLE
khoả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 UNSIGNED
khi 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 FLOAT
giá 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 TINYINT
sẽ 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 INT
hoặ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 .