Jag har ett decimaltal (kronor i detta fall), ex 100,35 som jag vill avrunda till nämsta 50 öre. Exemplet blir då 100,50. Lyckas dock inte med detta :-( . Har provat att plocka ut decimaldelen först och avrundat. Ingen snygg lösning direkt. Finns säkert något inbyggt i ramverket, men jag hittar inget. Gammalt, vanligt problem. Tyvärr så avrundar detta endast till närmsta heltal. Detta kan jag uppnå med Decimal.round(Tal,0). Vill att ex 0,37 skall bli 0,50 och 1,23 blir 1,0 osv Typ: Lite tips: >Att använda en konvertering till int för avrundningen säger inte så mycket vad intentionen med koden är. AnvändAvrundning närmsta 50 öre
Sv: Avrundning närmsta 50 öre
Lösningen blir (med reservation för rätt grejer i C#):
Int(2*Tal)/2.0Sv:Avrundning närmsta 50 öre
Sv: Avrundning närmsta 50 öre
<code>
float belopp;
belopp = 4.65;
belopp = ((float)((int)(belopp * 2.0f)) / 2.0f);
</code>
Det där borde fungera, dock otestat (samma princip som Niklas, fast det där borde se till att allting är av rätt typ)Sv:Avrundning närmsta 50 öre
Använd gärna datatypen double istället för float. Processorn gör alla flyttalsberäkningar med double, så en float måste konverteras innan beräkningen.
Att använda en konvertering till int för avrundningen säger inte så mycket vad intentionen med koden är. Använd metoden Round för att visa vad som avses.
double belopp = 4.65;
belopp = Math.Round(belopp * 2.0d) / 2.0d;Sv: Avrundning närmsta 50 öre
>metoden Round för att visa vad som avses.
Som vanligt med avrundning så måste man bestämma hur man vill ha det. Int och Round fungerar inte på samma sätt så att byta av läsbarhetsanledning är farligt.
Det stod inget i ursprungsfrågan om hur 25 öre eller negativa värden skall hanteras.