Was ist der beste Weg, um ein double
in ein umzuwandeln int
? Sollte eine Besetzung verwendet werden?
etc.
:)
Was ist der beste Weg, um ein double
in ein umzuwandeln int
? Sollte eine Besetzung verwendet werden?
etc.
:)
Antworten:
Sie können eine Umwandlung verwenden, wenn Sie das Standardverhalten zum Abschneiden gegen Null wünschen. Alternativ können Sie verwenden möchten Math.Ceiling
, Math.Round
, Math.Floor
usw. - obwohl Sie noch eine Besetzung danach benötigen.
Vergessen Sie nicht, dass der Bereich von int
viel kleiner ist als der Bereich von double
. Ein Cast von double
bis int
löst keine Ausnahme aus, wenn der Wert int
in einem ungeprüften Kontext außerhalb des Bereichs von liegt , während ein Aufruf von Convert.ToInt32(double)
will. Das Ergebnis der Umwandlung (in einem nicht aktivierten Kontext) ist explizit undefiniert, wenn der Wert außerhalb des Bereichs liegt.
int
beträgt immer 32 Bit, unabhängig davon, ob Sie einen 32- oder 64-Bit-Computer verwenden.
intVal = System.Convert.ToInt32(System.Math.Floor(dblVal));
using System;
oben in der Datei haben, an welchem Punkt es einfach sein könnteintVal = Convert.ToInt32(Math.Floor(dblVal));
using
Anweisungen zu informieren .
Wenn Sie also cast verwenden, werden (int)SomeDouble
Sie den Bruchteil abschneiden. Das heißt, wenn SomeDouble
4.9999 wäre , wäre das Ergebnis 4, nicht 5. Die Konvertierung in int rundet die Zahl nicht. Wenn Sie Rundungen verwenden möchtenMath.Round
Ja, warum nicht?
double someDouble = 12323.2;
int someInt = (int)someDouble;
Die Verwendung der Convert
Klasse funktioniert auch gut.
int someOtherInt = Convert.ToInt32(someDouble);
Convert.ToInt32
ist der beste Weg, um zu konvertieren
Hier ist ein vollständiges Beispiel
class Example
{
public static void Main()
{
double x, y;
int i;
x = 10.0;
y = 3.0;
// cast double to int, fractional component lost (Line to be replaced)
i = (int) (x / y);
Console.WriteLine("Integer outcome of x / y: " + i);
}
}
Wenn Sie die Zahl auf die engere Ganzzahl runden möchten, gehen Sie wie folgt vor:
i = (int) Math.Round(x / y); // Line replaced
Meine Wege sind:
- Convert.ToInt32(double_value)
- (int)double_value
- Int32.Parse(double_value.ToString());
double_value = 0.1