Visual Basic: variable runden
Hallo zusammen,
ich habe in Visual Basic eine Variable, die sich mit einer Formel errechnet. Diesen Wert würde ich gerne auf zwei Nachkommastellen runden, weiß aber nicht wie. Kann mir jemand helfen?
Gruß
1 Antwort
Die Funktion heißt Round(Number,[NumDigitsAfterDecimal as Long])
Sie ist mit Vorsicht zu genießen! Folgender Code gibt ein falsches Ergebnis:
Dim d As Double
d = 123.45
Debug.Print d & " " & Round(d, 1)
ergibt 123,45 123,4
Okey stimmt. Es gibt mehrere Rundungsvorschriften.
Üblich ist nunmal das kaufmännische Runden, bei dem geschaut wird, ob die Stelle nach der zu rundenden Stelle größer als 4 ist.
Normalerweise geht man davon aus, dass so gerundet wird.
Meine erste Vermutung war, dass 123,45 intern als 123,4499999999 o. ä. behandelt wird.
Leider hat der Fragesteller nicht erwähnt, nach welchem Verfahren er runden möchte. :/
In .NET gibt es die Round-Funktion auch mit einem dritten Argument, vom Typ System.MidpointRounding, das die gewünschte Rundungsmethode in diesen Grenzfällen angibt.
In vorhergehenden VBA-Versionen muss man sich ggf. seine eigene Rundungsfunktion schreiben. (Beachte dabei, dass Int immer in Richtung -unendlich geht, also Int(-2.3) -> -3)
Dann würde ich lieber die Worksheet-Funktion bevorzugen (normale Excelrundungsfunktion). Excel rundet kaufmännisch:
Application.WorksheetFunction.Round(d, 1)
Das Ergebnis ist nicht falsch. Es ist lediglich eine Rundungsvorschrift, die in den allgemeinbildenden Schulen aus irgendwelchen Gründen nicht gelehrt wird.
Nennt sich auch "banker's rounding"; ist zu finden in IEEE 754, wo dieses Verhalten ("Round to nearest, ties to even") als Standard empfohlen wird.