Was ist der beste Weg, um den ganzen Zahlenteil einer Dezimalstelle (in c #) zurückzugeben? (Dies muss für sehr große Zahlen funktionieren, die möglicherweise nicht in ein int passen.)
GetIntPart(343564564.4342) >> 343564564
GetIntPart(-323489.32) >> -323489
GetIntPart(324) >> 324
Der Zweck davon ist: Ich füge in ein Dezimalfeld (30,4) in der Datenbank ein und möchte sicherstellen, dass ich nicht versuche, eine Zahl einzufügen, die für das Feld zu lang ist. Das Bestimmen der Länge des ganzzahligen Teils der Dezimalstelle ist Teil dieser Operation.
Antworten:
Übrigens, Leute, (int) Decimal.MaxValue wird überlaufen. Sie können den "int" -Teil einer Dezimalstelle nicht erhalten, da die Dezimalstelle zu groß ist, um sie in das int-Feld einzufügen. Nur überprüft ... es ist sogar für eine lange Zeit zu groß (Int64).
Wenn Sie das Bit eines Dezimalwerts links vom Punkt haben möchten, müssen Sie Folgendes tun:
und geben Sie den Wert als ... DECIMAL oder DOUBLE zurück.
edit: Abschneiden ist definitiv die richtige Funktion!
quelle
Ich denke, System.Math.Truncate ist das, wonach Sie suchen.
quelle
Kommt darauf an, was du tust.
Zum Beispiel:
oder
Die Standardeinstellung ist immer die erstere, was eine Überraschung sein kann, aber sehr sinnvoll ist .
Ihre explizite Besetzung reicht aus:
Nach der Art und Weise, wie Sie die Frage formuliert haben, klingt es so, als ob dies nicht das ist, was Sie wollen - Sie möchten es jedes Mal auf den Boden legen.
Ich würde tun:
Überprüfen Sie auch die Größe Ihrer
decimal
- sie können ziemlich groß sein, so dass Sie möglicherweise eine verwenden müssenlong
.quelle
Sie müssen es nur als solches besetzen:
Wenn Sie es in späteren Berechnungen weiterhin als Dezimalzahl verwenden möchten, ist Math.Truncate (oder möglicherweise Math.Floor, wenn Sie ein bestimmtes Verhalten für negative Zahlen wünschen) die gewünschte Funktion.
quelle
Sehr einfache Möglichkeit, den Wert und seinen Bruchteilwert zu trennen.
s ist Bruchteil = 5 und
i ist Wert als ganze Zahl = 3
quelle
(int)Decimal.MaxValue
es überlaufen wird.Ich hoffe dir zu helfen.
quelle
quelle
decimal
ist weitaus größer als die vonint
. Auch dies ist keine VB-Frage.