INT

Aus C64-Wiki
Wechseln zu: Navigation, Suche
INT
Format: INT(<Ausdruck>)
Parameter
<Ausdruck>: numerischer Ausdruck
Einordnung
Typ: numerische Funktion
Kontext: Arithmetik
Aufgabe: Umwandlung in eine Ganzzahl ohne Nachkommastellen
Abkürzung: -
Verwandte Befehle

Anmerkung: Dieser Artikel beschreibt die numerische Funktion INT unter BASIC V2 des Commodore 64.


Die BASIC-Funktion INT() befreit (vereinfacht) eine Zahl von ihren Nachkommastellen. Genauer betrachtet wird eine gegebene Zahl in einen ganzzahligen Wert umgewandelt, wo jener Anteil der Zahl, der kleiner als 1 ist entfernt wird (entspricht also dem Dezimalanteil von Zahlen, die nicht in Exponentialdarstellung sind). Dabei ist das Ergebnis stets die nächstkleinere Ganzzahl, was im Falle von negativen Werten zur absolut größeren Zahl führt (ist also in diesem Fall nicht das simple Abtrennen der Nachkommastellen!). Dies entspricht einer Abrundungsfunktion.
Dieses Verhalten existiert auch implizit bei Zuweisungen von Ausdrücken an Integer-Variablen - diese Funktion wird auch sonst nicht für den Umgang mit Integer-Variablen benötigt.

Der Effekt der Entfernung der Nachkommastellen ist nur sichtbar, solange das Ergebnis (wegen der beschränkten Mantisse von Fließkommazahlen) noch als Ganzzahl darstellbar ist. Ab 999999999.6 und größer wird 1E+09 und im negativen Bereich ab -999999999.0 und kleiner wird -1E+09 dargestellt. Der positive Grenzfall verhält sich dabei entgegen des sonst üblichen Abrundens.

Um statt dem Abrunden das übliche Rundungsverhalten (ab 0,5 aufrunden, sonst abrunden) zu erreichen, ist ein Addieren von 0,5 zur Ausgangszahl notwendig. Siehe Beispiele.

Ist das Argument keine Zahl, so erscheint die BASIC-Fehlermeldung ?TYPE MISMATCH ERROR. Nur Zahlen aus dem Wertebereich -1e+38 bis 1e+38 werden verarbeitet, sonst wird die BASIC-Fehlermeldung ?OVERFLOW ERROR ausgegeben. Fehlt das numerische Argument, so erscheint ?SYNTAX ERROR.

Beispiele[Bearbeiten]

PRINT INT(1.53)   Auf dem Bildschirm wird 1 ausgegeben
PRINT INT(-9.47)  Auf dem Bildschirm wird -10 ausgegeben

Für korrektes Runden: 0,5 zur Ausgangszahl addieren:

PRINT INT((1.53)+0.5)   Auf dem Bildschirm wird 2 ausgegeben
PRINT INT((-9.47)+0.5)  Auf dem Bildschirm wird -9 ausgegeben

Positiver Grenzfall:

PRINT INT(999999999.5)   Auf dem Bildschirm wird 999999999  ausgegeben
PRINT INT(999999999.6)   Auf dem Bildschirm wird 1E+09  ausgegeben, obwohl 999999999 zu erwarten wäre

Negativer Grenzfall:

PRINT INT(-999999998.9)   Auf dem Bildschirm wird -999999999  ausgegeben
PRINT INT(-999999999.0)   Auf dem Bildschirm wird -1E+09  ausgegeben

Sehr große oder kleine Zahlen (Exponentialdarstellung):

PRINT INT(1.2345678E+20)   Auf dem Bildschirm wird der Wert unverändert ausgegeben - die Kommastellen bleiben!

Kaufmännisch runden: π auf 3 Nachkommastellen:

PRINT INT((3.14159265*1000)+0.5)/1000   Auf dem Bildschirm wird 3.142 ausgegeben


FRAC-Implementierung

Im BASIC V2 fehlende Implementierung der verwandten FRAC-Funktion, die den ganzzahligen Anteil einer Zahl entfernt bzw. nur die Nachkommastellen einer Zahl ermittelt:

10 DEF FN FC(X) = SGN(X)*(ABS(X) − INT(ABS(X)))
20 DEF FN SF(X) = X-INT(X)
30 PRINT  π;INT( π);FN FC( π);FN SF( π)
40 PRINT -π;INT(-π);FN FC(-π);FN SF(-π)
 3.14159265  3  .141592653  .141592653
-3.14159265 -4 -.141592653  .858407347

FN FC() ist allgemeingültig, während FN SF() für positive Werte stimmt.