Occhio alla virgola!

Ravanando in un foglio Excel, io e il mio fido capo abbiamo fatto una scoperta piuttosto inquietante.

una semplice operazione il cui risultato è ottenibile a mente senza sforzo, su Excel (ma direi su tutti i sistemi che trattano dati in virgola mobile) da il risultato sbagliato..

ebbene sì, e la prova arriva prestissimo, per fare la prova consiglio di usare i valori dello screenshot qui sotto, tenendo conto che nella cella C1 è presente la formula =A1-B1:

la differenza è 0,006… ma allora perchè la IF in D1 dice che C1 è maggiore di 0,06?!?!

semplice.. i dati in virgola mobile vengono rappresentati, come tutti i dati di un qualunque programma, in binario. Alcuni numeri non sono perfettamente rappresentabili in binario questo causa in qualche caso (non è regolare, dipende dal numero in se) aggiunge alla “N”esima cifra decimale un valore che però può causare dei problemi..

Aumentando infatti il numero di decimali della differenza fra A1 e B1 ecco cosa viene fuori…

ho fatto una prova anche con SQL e succede esattamente la stessa cosa

e se faccio il commercialista e devo fare dei conti al centesimo di EURO Come risolvo?!?!?

con un trucco del menga.. si memorizzano tutti i dati come interi (con gli interi il problema non sussiste) e si divide solo il risultato finale per 100..

ecco infatti qua sotto il risultato…

(in D5 è presente la stessa IF presente in D1)

Annunci
Questa voce è stata pubblicata in sql, Utilità. Contrassegna il permalink.

3 risposte a Occhio alla virgola!

  1. Valerio ha detto:

    Infatti nei software di contabilità, dove è importante l’utilizzo e la correttezza dei decimali, non si utilizzano i float ma i BCD. 😀

  2. Filippo ha detto:

    Il commercialista, che fa bilanci con Excel da qualche lustro, risponde:
    – il problema (che c’è, per carità) si presenta concretamente solo nelle COMPARAZIONI fra valori;
    – laddove le comparazioni servono (es.: foglio ESPOSITIVO del bilancio, che riassume in unità di Euro i valori recuperati da decine di fogli) utilizzi le funzioni di arrotondamento, ed il problema scompare

Rispondi

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione / Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione / Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione / Modifica )

Google+ photo

Stai commentando usando il tuo account Google+. Chiudi sessione / Modifica )

Connessione a %s...