Wie könnte ich konvertieren ein doppelt auf den nächsten ganzzahligen Wert?
Frage
Wie konvertieren Sie ein Doppel in das nächste int?
Lösung
Verwenden Math.round()
, möglicherweise in Verbindung mit MidpointRounding.AwayFromZero
Beispiel:
Math.Round(1.2) ==> 1
Math.Round(1.5) ==> 2
Math.Round(2.5) ==> 2
Math.Round(2.5, MidpointRounding.AwayFromZero) ==> 3
Andere Tipps
double d = 1.234;
int i = Convert.ToInt32(d);
Griffe Runden wie folgt:
gerundet auf die nächste 32-Bit-Ganzzahl mit Vorzeichen. Wenn der Wert auf halber Strecke zwischen zwei ganzen Zahlen, wird die gerade Zahl zurückgegeben; das heißt, 4,5 umgewandelt wird 4 und 5.5 bis 6 umgewandelt wird.
Sie können auch Funktion:
//Works with negative numbers now
static int MyRound(double d) {
if (d < 0) {
return (int)(d - 0.5);
}
return (int)(d + 0.5);
}
auf der Architektur Je ist es mehrmals schneller.
double d;
int rounded = (int)Math.Round(d);
Ich weiß, diese Frage ist alt, aber ich kam in meiner Suche nach der Antwort auf meine ähnliche Frage über sie. Ich dachte, ich würde den sehr nützlichen Tipp teilen, die ich erhalten habe.
Wenn in int konvertieren, fügen Sie einfach 0,5 auf Ihren Wert vor einziehe. Wie einziehe immer fällt die geringere Zahl in int (zB (int) 1,7 = 1), wenn Ihre Nummer 0,5 oder höher ist, ist es 0,5 Zugabe wird in die nächste Zahl nach oben bringen und Ihrem gesenkten dem richtigen Wert int sollte zurückkehren . (Z (int) (1,8 + 0,5) = 2)
Ich hoffe, diese Antwort ist hilfreich für jeden.
Für Unity verwenden Mathf.RoundToInt .
using UnityEngine;
public class ExampleScript : MonoBehaviour
{
void Start()
{
// Prints 10
Debug.Log(Mathf.RoundToInt(10.0f));
// Prints 10
Debug.Log(Mathf.RoundToInt(10.2f));
// Prints 11
Debug.Log(Mathf.RoundToInt(10.7f));
// Prints 10
Debug.Log(Mathf.RoundToInt(10.5f));
// Prints 12
Debug.Log(Mathf.RoundToInt(11.5f));
// Prints -10
Debug.Log(Mathf.RoundToInt(-10.0f));
// Prints -10
Debug.Log(Mathf.RoundToInt(-10.2f));
// Prints -11
Debug.Log(Mathf.RoundToInt(-10.7f));
// Prints -10
Debug.Log(Mathf.RoundToInt(-10.5f));
// Prints -12
Debug.Log(Mathf.RoundToInt(-11.5f));
}
}
public static int RoundToInt(float f) { return (int)Math.Round(f); }
Ich entwickle einen wissenschaftlichen Rechner, der eine Int-Taste Sport. Ich habe die folgende ist eine einfache und zuverlässige Lösung gefunden:
double dblInteger;
if( dblNumber < 0 )
dblInteger = Math.Ceiling(dblNumber);
else
dblInteger = Math.Floor(dblNumber);
Math.Round manchmal unerwartete oder unerwünschte Ergebnisse und explizite Konvertierung erzeugt oft in Integer (über Guss- oder Convert.ToInt ...) erzeugt falsche Werte für höhere Präzision Zahlen. Das oben beschriebene Verfahren scheint immer zu funktionieren.