Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Utilizzare float o decimale per l'importo in dollari dell'applicazione contabile?

Il tipo di dati Float o Decimal deve essere utilizzato per importi in dollari?

La risposta è facile. Non galleggia mai. MAI !

I float erano secondo IEEE 754 sempre binari, solo il nuovo standard IEEE 754R definiva i formati decimali. Molte delle parti binarie frazionarie non possono mai eguagliare l'esatta rappresentazione decimale.

Qualsiasi numero binario può essere scritto come m/2^n (m , n numeri interi positivi), qualsiasi numero decimale come m/(2^n*5^n) .Poiché i binari mancano del factor 5 principale , tutti i numeri binari possono essere rappresentati esattamente da decimali, ma non viceversa.

0.3 = 3/(2^1 * 5^1) = 0.3

0.3 = [0.25/0.5] [0.25/0.375] [0.25/3.125] [0.2825/3.125]

          1/4         1/8         1/16          1/32

Quindi finisci con un numero superiore o inferiore al numero decimale indicato. Sempre.

Perché importa? Arrotondamento.

L'arrotondamento normale significa 0..4 per difetto, 5..9 per aumento. Quindi fa importa se il risultato è o 0.049999999999 .... o 0.0500000000 ... Potresti sapere che significa 5 cent, ma il computer non lo sa e arrotonda 0.4999 ... down (sbagliato) e 0.5000 ... in alto (a destra).

Dato che il risultato dei calcoli in virgola mobile contiene sempre piccoli termini di errore, la decisione è pura fortuna. Diventa senza speranza se si desidera una gestione decimale da arrotondamento a pari con numeri binari.

Poco convinta? Insisti sul fatto che nel tuo sistema di account sia tutto perfettamente ok? Attività e passività uguali? Ok, quindi prendi ciascuno dei numeri formattati dati di ciascuna voce, analizzali e sommali con un sistema decimale indipendente!

Confrontalo con la somma formattata. Oops, c'è qualcosa che non va, vero?

Per quel calcolo era richiesta estrema precisione e fedeltà (abbiamo usato Oracle'sFLOAT) in modo da poter registrare il "miliardesimo di centesimo" accumulato.

Non aiuta contro questo errore. Perché tutte le persone presumono automaticamente che il computer risponda correttamente e praticamente nessuno controlla in modo indipendente.