2009-05-25 26 views
44

In C#, come faccio a arrotondare un float al più vicino int?Come faccio a arrotondare un float al più vicino int in C#?

Vedo Math.Ceiling e Math.Round, ma restituisce un decimale. Devo usare uno di questi poi lanciato su un Int?

+0

Vedere http://stackoverflow.com/questions/14/whats-the-difference-tra between-math-floor-and-math-truncate-in-net per un riepilogo completo. – paxdiablo

risposta

103

Se si desidera arrotondare al più vicino int:

int rounded = (int)Math.Round(precise, 0); 

Puoi anche utilizzare:

int rounded = Convert.ToInt32(precise); 

Che useranno Math.Round(x, 0); per arrotondare e lanciare per te. Sembra più ordinato ma è leggermente meno chiaro.


Se si desidera arrotondare fino:

int roundedUp = (int)Math.Ceiling(precise); 
+9

C'è una certa ambiguità nella domanda. Il titolo suggerisce che vuole radunare, mentre afferma che vuole l'int più vicino. Queste sono 2 cose diverse. – mmcdole

+0

Ha voluto arrotondare. Non sarebbe (int) Math.Ceiling (preciso)? – configurator

+0

@configurator, sì, questo è quello che sto pensando. – mmcdole

9

Fuori della parte superiore della mia testa:

float fl = 0.678; 
int rounded_f = (int)(fl+0.5f); 
+0

Cura di spiegare l'ultima f (0.5f)? –

+4

Mentre un lancio float su un valore int verrà arrotondato per difetto, +0.5 assicura che il cast arrivi all'intro più vicino. Tuttavia, questo funziona solo per i galleggianti positivi. –

1

posso utilizzare uno di questi poi gettato in un Int?

Sì. Non c'è nessun problema a farlo. Decimali e doppi possono rappresentare esattamente gli interi, quindi non ci sarà alcun errore di rappresentazione. (Non si ottiene un caso, ad esempio, in cui Round restituisce 4.999 ... anziché 5.)

2

Il più semplice è aggiungere solo 0.5f e quindi eseguire il cast in un file int.

0

È possibile eseguire il cast su un valore int fornito che si è sicuri che sia nell'intervallo per un valore int (Int32.MinValue a Int32.MaxValue).

Problemi correlati