Ganzzahlen

Aus VBA-wiki
Zur Navigation springen Zur Suche springen

Ganzzahlen sind natürliche Zahlen, also Zahlen, die keine Nachkommastellen haben.

In der Programmierung werden Ganzzahlen zum Beispiel für Indizes in Schleifen eingesetzt.

Rechnen mit Ganzzahlen

Siehe auch Arithmetische Operatoren und Rechenfunktionen.

Division

Da das Ergebnis einer Ganzzahligen Division sehr häufig keine Ganzzahl ist, sollten Sie das Ergebnis in eine Variable mit einem Gleitkomma-Datentyp entgegennehmen:

   Dim dblResult As Double
   
   dblResult = 3 / 2
   Debug.Print dblResult     ' Ergibt 1,5

Ganzzahlige Division

Wenn Sie ausschließlich an dem ganzzahligen Wert des Ergebnis interessiert sind, sollten Sie statt des '/'-Operators den '\'-Operator verwenden. Dieser gibt den ganzzahligen Wert einer Division zurück, ohne zu runden:

   Dim intResult As Integer
   
   intResult = 3 \ 2
   Debug.Print intResult       ' ergibt 1
   intResult = 5 \ 2
   Debug.Print intResult       ' ergibt 2
   
   ' Denn:
   intResult = 3 / 2   ' ergibt 2 !
   intResult = 5 / 2   ' ergibt ebenfalls 2 !?!

Warum die beiden letzten Ergebnisse (3 / 2 und 5 / 2) beide 2 ergeben, lesen Sie im Abschnitt Runden!

Rest einer Ganzzahligen Division

Der Rest einer Ganzzahligen Division wird mit dem Operator Mod zurückgegeben:

Debug.Print 2 \ 3            ' 0
Debug.Print 2 Mod 3          ' 2

entspricht:

2 : 3 = 0   (ganzzahliger Teil der Division)
0
-
2   (Rest)
Debug.Print 3 \ 2            ' 1
Debug.Print 3 Mod 2          ' 1

entspricht:

3 : 2 = 1   (ganzzahliger Teil der Division)
2
-
1   (Rest)
Debug.Print 127 \ 4           ' 31
Debug.Print 127 Mod 4         ' 3

entspricht:

127 : 4 = 31   (ganzzahliger Teil der Division)
124
-
3   (Rest)

Arbeiten mit Ganzzahlen

Umwandeln

Wenn Sie einer Ganzzahl einen Wert mit Nachkommastellen zuweisen, wird diese automatisch in eine Ganzzahl umgewandelt. Alternativ können Sie auch die Funktionen CInt() bzw. CLng() verwenden:

Dim intResult As Integer
Dim lngResult As Long

intResult = 5 / 2          ' ergibt 2
intResult = Round(5 / 2)   ' ergibt 2
intResult = CInt(5 / 2)    ' ergibt 2
lngResult = CLng(5 / 2)    ' ergibt 2

Wenn eine Gleitkommazahl in eine Ganzzahl umgewandelt wird (entweder automatisch oder mit den Funktionen CInt() bzw. CLng()), wird das Ergebnis gerundet:

Runden

Siehe Arithmetische Operatoren und Rechenfunktionen: Runden

Nachkommastellen abschneiden

Positive Zahlen

Das englisch 'Truncate' genannte Verfahren, die Nachkommastellen einer Kommazahl abzuschneiden, kann mit folgenden Funktionen erreicht werden:

   Debug.Print Int(12.7)       ' 12
   Debug.Print Fix(12.7)       ' 12

Die Nachkommastellen werden also nicht gerundet, sondern entfernt. Übrig bleibt die vorangestellte Ganzzahl:

IntFixPositive.png

Negative Zahlen

Der Unterschied zwischen Int() und Fix() zeigt sich beim Umwandeln von negativen Werten:

   Debug.Print Int(-12.7)      ' -13
   Debug.Print Int(-12.1)      ' -13
   Debug.Print Fix(-12.7)      ' -12
   Debug.Print Fix(-12.1)      ' -12
  • Die 'Int'-Funktion schneidet bei negativen Zahlen die Nachkommastellen ab und erniedrigt auf die nächste Ganzzahl (-13 ist niedriger als -12).
  • Die 'Fix'-Funktion schneidet ebenfalls bei negativen Zahlen die Nachkommastellen ab und erhöht auf die nächste Ganzzahl (-12 ist höher als -13).

IntFixNegative.png