Ich bin auf ein Problem mit CInt gestoßen und habe ein Double in eine ganze Zahl umgewandelt.
Das Problem ist das Folgende:
%Vor% Ich habe mich an die C # -Stil-Konvertierung gewöhnt, wo (int) 10.51
10 ist.
Wie in der Frage zu Integer.Parse vs CInt hervorgehoben wurde, das Ergebnis ist nur auf gewisse Weise abgerundet.
Allerdings brauche ich nur einen ganzzahligen Teil und werfe den Bruchteil weg. Wie kann ich diese Art der Konvertierung in VB.NET erreichen? Nach einigen Recherchen sehe ich, dass ich die Funktion Fix()
verwenden kann, um den Trick zu machen, aber ist es die beste Wahl?
Erstens ist Ihre Annahme, dass CInt
äquivalent zu (int)
in C # ist, falsch.
Zweitens, das Rundungsverhalten von CInt
wird nicht zufällig zugewiesen - es verwendet tatsächlich "Bankers runding":
Bruchteile. Wenn Sie einen nicht integrierten Wert in ein Integral konvertieren Typ, die Integer-Konvertierungsfunktionen (CByte, CInt, CLng, CSByte, CShort, CUInt, CULng und CUShort) entfernen Sie den Bruchteil und Runden Sie den Wert auf die nächste Ganzzahl.
Wenn der Bruchteil genau 0,5 ist, wird die ganzzahlige Umwandlung durchgeführt Funktionen runden es auf die nächste gerade Ganzzahl . Zum Beispiel 0,5 Runden auf 0, und 1.5 und 2.5 beide Runde 2. Dies wird manchmal genannt Banker's Rundung, und ihr Zweck ist es, eine Voreingenommenheit auszugleichen, die könnte sich ansammeln, wenn man viele solcher Zahlen zusammenfügt.
Das beste Gegenstück zur Verwendung von (int)
in C # ist die Funktion Fix
im Namensraum VisualBasic
, die auf Null abgerundet wird (wie Math.Truncate
).
Dies gibt jedoch einen doppelten Wert zurück, so dass Sie eine weitere Konvertierung durchführen müssen, um mit CInt
zu Ihrer Ganzzahl zu gelangen.
Tags und Links .net vb.net rounding c#-to-vb.net number-rounding