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)



