2009-05-25 3 views
44

Wie richte ich in C# einen Float zum nächsten int?Wie richte ich einen Float bis zum nächsten int in C#?

Ich sehe Math.Ceiling und Math.Round, aber diese gibt eine Dezimalzahl zurück. Benutze ich eine von diesen und dann zu einem Int?

+0

Siehe http://stackoverflow.com/questions/14/whats-the-difference-between-math-floor-and-math-truncate-in-net für eine vollständige Zusammenfassung. – paxdiablo

Antwort

103

Wenn Sie die nächsten int runden mögen:

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

Sie können auch verwenden:

int rounded = Convert.ToInt32(precise); 

Welches wird Math.Round(x, 0); verwenden, um für Sie zu runden und zu werfen. Es sieht besser aus, ist aber etwas weniger klar IMO.


Wenn Sie bis runden:

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

Es gibt Unklarheiten in der Frage. Der Titel deutet an, dass er sich zusammenschließen möchte, während er angibt, dass er den nächsten Int. Dies sind 2 verschiedene Dinge. – mmcdole

+0

Er wollte zusammenfassen. Wäre das nicht (int) Math.Ceiling (präzise)? – configurator

+0

@configurator, ja, das ist, was ich denke. – mmcdole

9

Aus der Spitze von meinem Kopf:

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

Pflege, um das letzte f (0.5f) zu erklären? –

+4

Wenn ein float-Wert für einen int-Wert gerundet wird, sorgt der Wert von +0.5 dafür, dass die gewürfelten Werte zum nächsten int-Wert passen. Dies funktioniert jedoch nur für positive Floats. –

1

Muss ich eine davon verwenden dann zu einem Int werfen?

Ja. Es ist kein Problem, das zu tun. Dezimalzahlen und Doppelwerte können ganze Zahlen genau darstellen, so dass es keinen Darstellungsfehler geben wird. (Sie erhalten keinen Fall, z. B. wo Round 4.999 ... statt 5. zurückgibt.)

2

Am einfachsten ist es, einfach 0.5f hinzuzufügen und dann dieses an einen int zu übergeben.

0

Sie können in einen int umwandeln, vorausgesetzt, Sie sind sicher, dass es sich um einen int (Int32.MinValue bis Int32.MaxValue) handelt.

Verwandte Themen