Tomaré la postura opuesta.
FLOAT
es para números aproximados, como porcentajes, promedios, etc. Debe formatear mientras muestra los valores, ya sea en el código de la aplicación o usando la FORMAT()
función de MySQL.
Nunca pruebes float_value = 1.3
; Hay muchas razones por las que eso fallará.
DECIMAL
debe usarse para valores monetarios. DECIMAL
evita un segundo redondeo cuando un valor debe redondearse a dólares / centavos / euros / etc. A los contadores no les gustan las fracciones de centavos.
La implementación de MySQL DECIMAL
permite 65 dígitos significativos; FLOAT
da aproximadamente 7 y DOUBLE
aproximadamente 16. 7 es generalmente más que suficiente para sensores y cálculos científicos.
En cuanto al "porcentaje": a veces lo he usado TINYINT UNSIGNED
cuando quiero consumir solo 1 byte de almacenamiento y no necesito mucha precisión; a veces he usado FLOAT
(4 bytes). No hay ningún tipo de datos ajustado específicamente para el porcentaje. (Tenga en cuenta también que DECIMAL(2,0)
eso no puede contener el valor 100
, por lo que técnicamente necesitaría DECIMAL(3,0)
).
O, a veces, he usado un FLOAT
valor que tenía un valor entre 0 y 1. Pero tendría que asegurarme de multiplicar por 100 antes de mostrar el "porcentaje".
Más
Los tres "porcentaje, promedio, tasa" huelen a flotadores, así que esa sería mi primera opción.
Un criterio para decidir el tipo de datos ... ¿Cuántas copias del valor existirán?
Si tiene una tabla de mil millones de filas con una columna para un porcentaje, considere que TINYINT
tomaría 1 byte (1 GB en total), pero FLOAT
tomaría 4 bytes (4 GB en total). OTOH, la mayoría de las aplicaciones no tienen tantas filas, por lo que esto puede no ser relevante.
Como regla 'general', los valores "exactos" deben usar alguna forma de INT
o DECIMAL
. Las cosas inexactas (cálculos científicos, raíces cuadradas, división, etc.) deben usar FLOAT
(o DOUBLE
).
Además, el formato de la salida generalmente se debe dejar al front-end de la aplicación. Es decir, a pesar de que un "promedio" puede calcular a "14.6666666 ...", la pantalla debería mostrar algo así como "14.7"; Esto es más amigable para los humanos. Mientras tanto, tiene el valor subyacente para decidir más tarde que "15" o "14.667" es el formato de salida preferible.
El rango "0.00 - 100.00" se puede hacer con FLOAT
y utilizando el formato de salida o con DECIMAL(5,2)
(3 bytes) con la determinación previa de que siempre querrá la precisión indicada .