Visual Basic: variable runden

1 Antwort

Vom Beitragsersteller als hilfreich ausgezeichnet

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

Woher ich das weiß:Berufserfahrung – Programmierer

PWolff  22.04.2015, 14:58

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.

1
Suboptimierer  22.04.2015, 15:05
@PWolff

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. :/

0
PWolff  22.04.2015, 15:29
@Suboptimierer

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)

0
Suboptimierer  22.04.2015, 15:33
@PWolff

Dann würde ich lieber die Worksheet-Funktion bevorzugen (normale Excelrundungsfunktion). Excel rundet kaufmännisch:

Application.WorksheetFunction.Round(d, 1)
0