Sembra che ci sia un qualche tipo di errore di arrotondamento oscura quando si esegue il seguente codice:Risultato della fusione doppia in int è sbagliato
int roundedTotal = (int)(PriorityJob * 100.0);
Inizialmente PriorityJob = 1.4
e roundedTotal
non è definito. La valutazione di PriorityJob * 100.0
a quel punto fornisce 140
. Successivamente roundedTotal = 139
.
Apparentemente 140.0 viene interpretato come 139.99999. Si tratta di una carenza nel motore a virgola mobile? Non ho mai visto nulla di simile.
non hai mai visto approssimati? –
1.4 non esiste come float. Infatti, c'è un numero infinito di numeri anche tra 1.0 e 2.0 che non possono essere rappresentati come float, 1.4 è uno di questi. Quindi viene memorizzato come un'approssimazione di 1.4, come 1.3999999999999999 – nos
@LuchianGrigore Sembra un'operazione così semplice. Perché dovrebbe fallire così? –