Per capire il problema, è necessario capire le basi di floating point di rappresentanza e le operazioni.
0.8f non può essere rappresentato esattamente in memoria utilizzando un numero in virgola mobile.
In matematica, 64/0.8 uguale 80. In aritmetica in virgola mobile, 60/0,8 equivale approssimativamente 80.
Quando lanci un galleggiante per un intero o un byte, solo la parte intera del numero è tenuto. Nel tuo caso, il risultato impreciso della divisione in virgola mobile è leggermente inferiore a 80 quindi la conversione in intero produce 79.
Se hai bisogno di un risultato intero, ti suggerisco di arrotondare il risultato invece di lanciarlo . Un modo per farlo è quello di utilizzare la seguente funzione, che converte in un intero arrotondando al numero intero più vicino:
Convert.ToInt32(64/0.8f);
Ho modificato il titolo. Per favore vedi, "[Le domande dovrebbero includere" tag "nei loro titoli?] (Http://meta.stackexchange.com/questions/19190/)", dove il consenso è "no, non dovrebbero". –
Questo articolo di Jon Skeet dovrebbe coprire la tua domanda: http://csharpindepth.com/articles/general/floatingpoint.aspx – Warlock