Le variazioni nella "cifra meno significativa" possono causare l'arrotondamento dell'intero numero nella direzione sbagliata.
Prendiamo un oggetto che costa $ 0,705 - il mezzo centesimo è da sconto, tasse o qualcosa del genere, oppure questo è uno sconto del 10% su qualcosa che è $ 7,05. In ogni caso ... tre di loro e stiamo calcolando il prezzo (o lo sconto). Il prezzo totale è di $ 2,15 e devi arrotondare opportunamente a $ 2,12 (mezzo alto).
public class Round {
public static void main(String[] args) {
double item = 0.705;
double subtotal = item * 3;
System.out.println(subtotal);
double rounded = Math.round(subtotal * 100.0)/100.0;
System.out.println(rounded);
subtotal = 2.115; // what the subtotal *should* be
rounded = Math.round(subtotal * 100.0)/100.0;
System.out.println(rounded);
}
}
Tuttavia, l'output di questo programma è:
2.1149999999999998
2.11
2.12
E lì, siamo fuori da un centesimo a causa di qualcosa che è accaduto nella cifra meno significativa di un calcolo in virgola mobile.
Avendo lavorato in precedenza sul codice del punto vendita che spaventosamente aveva i doppi sparsi attraverso di loro (ho passato mesi a convertirli in un sistema arbitrario a punto fisso). Sono sicuro di aver risolto quel problema, almeno in tutto il codice che stavo cercando a ...), posso assicurarti che sono un vero problema e che la cifra meno significativa che si trova in una posizione è un grosso problema.
In un primo momento, questo sarà un "oh, è solo un centesimo" ma in questo software, si tratta di soldi ... e la gente si sente molto permalosa per il fatto che i soldi siano spenti. Ci sono due parti: la fiducia che il cliente ha quando vede $0.705 * 3 = $2.11
quando sa che dovrebbe essere $2.12
. L'altra parte è che il denaro si accumula e nel corso di giorni o settimane o mesi, aggiunge importi potenzialmente considerevoli quando non viene calcolato correttamente. Questo accade spesso nei calcoli delle tasse (questo è un modo facile per ottenere frazioni scomode) e le agenzie che raccolgono le tasse sono molto meno simpatiche del cliente che è fuori da un centesimo ... e possono fare cose cattive come gli audit.