Citat:
Ursprungligen postat av
Kablash
Jag får dock fortfarande problem. 1/2 (som blir 0.5) rundas till 0 istället för 1. Även fast jag har lagt till att mid point rounding ska vara away from zero.
Kod:
double d1 = 1 / 2; //som blir 0.5
Math.Round(d1, MidpointRounding.AwayFromZero); //här bör väl 0.5 avrundas till 1.
int i = Convert.ToInt32(d1);
return i; //Och här ska koden ge ut 1.
Men den ger ut 0.
Du gör flera vanliga nybörjarmisstag, bra kodexempel
Kod:
double d1 = 1 / 2; //som blir 0.5
Vad som händer här är heltalsdivision följt av en konvertering till flyttal. (int)1 / (int)2 = 0. Detta är vad % är till för, den ger resten vid heltalsdivision (int)1 % (int)2 = 1, men det är inte viktigt för ditt problem. För att få till flyttalsdivision måste minst ett av de ingående talen vara ett flyttal.
Kod:
Math.Round(d1, MidpointRounding.AwayFromZero); //här bör väl 0.5 avrundas till 1.
Här är det lätt att tro att d1 uppdateras när Round anropas, men det används bara som in-parameter. Resultatet av Round returneras från anropet. Detta gäller för i princip allt i .NET ramverket, utom när out- och ref-parametrar används.
Följande borde göra vad du vill åstadkomma:
Kod:
double d1 = 1 / 2.0; // 0.5
d1 = Math.Round(d1, MidpointRounding.AwayFromZero); // 1.0
int i = (int)d1; // 1
return i;