Mam ten kod;Dziwnie działające dziwne (jak zmiennoprzecinkowe)
static int test = 100;
static int Test
{
get
{
return (int)(test * 0.01f);
}
}
wyjściowy: 0
Ale ten kod zwraca inny
static int test = 100;
static int Test
{
get
{
var y = (test * 0.01f);
return (int)y;
}
}
wyjście: 1
Również mam ten kod
static int test = 100;
static int Test
{
get
{
return (int)(100 * 0.01f);
}
}
wyjście jest: 1
Patrzę na wyjście IL i nie rozumiem, dlaczego C# robi tę operację matematyczną w czasie kompilacji, a wynik jest inny?
Czym różnią się te dwa kody? Dlaczego zdecydowałem się na zmianę wyniku zmiennej?
Jak sprawdzić wartości? – dotctor
Prawdopodobny duplikat [Czy matematyka zmiennoprzecinkowa jest zepsuta?] (Http://stackoverflow.com/questions/588004/is-floating-point-math-broken) – Liam
Szukałem SO, ale nie mogę znaleźć dokładna odpowiedź. Ta odpowiedź może jednak trochę wyjaśnić: http://stackoverflow.com/a/15117741/2594485 –