Prenderò la posizione opposta.
FLOAT
è per numeri approssimativi, come percentuali, medie, ecc. Dovresti eseguire la formattazione mentre visualizzi i valori, nel codice dell'app o usando la FORMAT()
funzione di MySQL.
Non testare mai float_value = 1.3
; ci sono molte ragioni per cui ciò fallirà.
DECIMAL
dovrebbe essere usato per valori monetari. DECIMAL
evita un secondo arrotondamento quando un valore deve essere arrotondato a dollari / centesimi / euro / ecc. Ai contabili non piacciono le frazioni di centesimi.
L'implementazione di MySQL di DECIMAL
consente 65 cifre significative; FLOAT
dà circa 7 e DOUBLE
circa 16. 7 è di solito più che sufficiente per sensori e calcoli scientifici.
Per quanto riguarda "percentuale" - A volte l'ho usato TINYINT UNSIGNED
quando volevo consumare solo 1 byte di memoria e non ho bisogno di molta precisione; a volte l'ho usato FLOAT
(4 byte). Non esiste un tipo di dati ottimizzato appositamente per la percentuale. (Nota anche che DECIMAL(2,0)
non può contenere il valore 100
, quindi tecnicamente ne avresti bisogno DECIMAL(3,0)
.)
O a volte ho usato un FLOAT
valore che conteneva un valore compreso tra 0 e 1. Ma poi avrei bisogno di assicurarmi di moltiplicare per 100 prima di visualizzare la "percentuale".
Di Più
Tutti e tre di "percentuale, media, tasso" odorano di galleggianti, quindi sarebbe la mia prima scelta.
Un criterio per decidere il tipo di dati ... Quante copie del valore esistono?
Se hai una tabella da un miliardo di righe con una colonna per una percentuale, consideralo TINYINT
occorrerebbe 1 byte (1 GB in totale), ma FLOAT
richiederebbe 4 byte (4 GB in totale). OTOH, la maggior parte delle applicazioni non ha tante righe, quindi potrebbe non essere rilevante.
Come regola 'generale', i valori "esatti" dovrebbero usare una qualche forma di INT
o DECIMAL
. Le cose inesatte (calcoli scientifici, radici quadrate, divisione, ecc.) Dovrebbero usareFLOAT
(o DOUBLE
).
Inoltre, il formattazione dell'output dovrebbe di solito essere lasciata al front-end dell'applicazione. Cioè, anche se una "media" può essere calcolata su "14.6666666 ...", il display dovrebbe mostrare qualcosa come "14.7"; questo è più amichevole per gli umani. Nel frattempo, hai il valore sottostante per decidere in seguito che "15" o "14.667" è la formattazione di output preferibile.
L'intervallo "0,00 - 100,00" può essere eseguito con FLOAT
e utilizzare la formattazione dell'output o con DECIMAL(5,2)
(3 byte) con la predeterminazione che si desidera sempre la precisione indicata .