Eu vou tomar a posição oposta.
FLOAT
é para números aproximados, como porcentagens, médias etc. Você deve formatar ao exibir os valores, no código do aplicativo ou usando a FORMAT()
função do MySQL.
Nunca teste float_value = 1.3
; existem muitas razões pelas quais isso irá falhar.
DECIMAL
deve ser usado para valores monetários. DECIMAL
evita um segundo arredondamento quando um valor precisa ser arredondado para dólares / centavos / euros / etc. Contadores não gostam de frações de centavos.
A implementação do MySQL DECIMAL
permite 65 dígitos significativos; FLOAT
dá cerca de 7 e DOUBLE
cerca de 16. 7 geralmente é mais que suficiente para sensores e cálculos científicos.
Quanto à "porcentagem" - às vezes eu uso TINYINT UNSIGNED
quando quero consumir apenas 1 byte de armazenamento e não preciso de muita precisão; às vezes eu usei FLOAT
(4 bytes). Não há tipo de dados ajustado especificamente para porcentagem. (Observe também que isso DECIMAL(2,0)
não pode conter o valor 100
, portanto, tecnicamente, você precisaria DECIMAL(3,0)
.)
Ou, às vezes, usei um FLOAT
que mantinha um valor entre 0 e 1. Mas, então, precisaria me certificar de multiplicar por 100 antes de exibir a "porcentagem".
Mais
Todos os três "percentual, média, taxa" cheiram a carros alegóricos, então essa seria minha primeira escolha.
Um critério para decidir sobre o tipo de dados ... Quantas cópias do valor existirão?
Se você tiver uma tabela de bilhões de linhas com uma coluna para uma porcentagem, considere que TINYINT
isso levaria 1 byte (total de 1 GB), mas FLOAT
levaria 4 bytes (total de 4 GB). OTOH, a maioria dos aplicativos não possui muitas linhas, portanto isso pode não ser relevante.
Como regra geral, valores "exatos" devem usar alguma forma de INT
ou DECIMAL
. Coisas inexatas (cálculos científicos, raízes quadradas, divisão, etc.) devem usar FLOAT
(ou DOUBLE
).
Além disso, a formatação da saída geralmente deve ser deixada para o front end do aplicativo. Ou seja, mesmo que uma "média" possa ser calculada como "14.6666666 ...", a exibição deve mostrar algo como "14.7"; isso é mais amigável para os seres humanos. Enquanto isso, você tem o valor subjacente para decidir posteriormente que "15" ou "14.667" é a formatação de saída preferível.
O intervalo "0,00 - 100,00" pode ser feito com FLOAT
e usar a formatação de saída ou com DECIMAL(5,2)
(3 bytes) com a pré-determinação de que você sempre desejará a precisão indicada .