Dovrei usare decimale, float o double per questo semplice risultato matematico?
-
19-08-2019 - |
Domanda
Sto facendo dei calcoli molto semplici e sto salvando il risultato su un DB MS SQL2008.
Sto calcolando la media fuori da alcuni numeri, che sono valori di byte tra 1 < - > 5. Desidero registrare probabilmente solo 2 cifre decimali. Non mi interessa arrotondare per il secondo decimale (es. A 1.155 == 1.5 o 1.6 .. non sono troppo graduale).
Quindi .. dovrei memorizzare il risultato medio come float, decimale o doppio?
Quando controllo cosa restituisce LINQ, può restituire tutti e tre i valori!
Infine, quale sarebbe anche il campo relativo al tipo di dati SQL.
evviva!
Soluzione
Ciò di cui hai bisogno è il tipo di dati DECIMAL:
declare @val decimal(10,2)
select @val = 10.155
select @val
Quando inserisci valori, puoi fare affidamento sull'arrotondamento incorporato o decidere esplicitamente quale arrotondamento vuoi:
select val = round(10.155, 2, 0) -- rounded
select val = round(10.155, 2, 1) -- truncated
Decimale (10,2) significa che è possibile utilizzare dieci cifre e che due di esse devono essere considerate come dopo il punto decimale. cioè il numero più alto che può contenere il decimale (4,2) è 99,99. Cercare di impostarlo su 100 comporterà un overflow aritmetico.
Altri suggerimenti
Il decimale è utilizzato principalmente per la valuta. Mentre funzionerebbe, la gente potrebbe trovarlo confuso. In questo caso, penso che float sarebbe una scelta migliore.
Decimale - è il più semplice, tuttavia qualsiasi mentato farà il lavoro
Se vuoi archiviare i risultati usando il minor spazio possibile, probabilmente potresti fare qualcosa del genere (pseudocodice):
integer = ( sum(all_values) / all_values.count().float ) * 100;
Questo ti darà il valore 352 per una media di 3,52 in modo da poterlo memorizzare come intero (il byte sarebbe abbastanza grande immagino) e dividerlo per 100 quando vuoi visualizzarlo.
D'altra parte se non ti interessa la memorizzazione del valore medio, l'utilizzo di valori float è forse più veloce. (Prova entrambi per vedere cosa è effettivamente più veloce sul tuo sistema.)