VAL
Die BASIC-Funktion VAL() wandelt eine Zeichenkette (String) in eine Zahl um.
Die Funktion VAL (engl. value) ermittelt den in der Zeichenkette enthaltenen Zahlenwert nach folgenden Regeln. Es kann sich um eine positive oder negative Zahl handeln. Leerzeichen, egal an welcher Stelle, werden dabei ignoriert. Das erste Minus- (−) bzw. Plus-Zeichen (+) in der Zeichenkette vor Ziffern oder Dezimalpunkt wird als Vorzeichen interpretiert. Die Suche nach dem Zahlenwert im String endet bei der ersten Nicht-Ziffer – davon ausgenommen sind der erste gefundene Punkt (.), der als Dezimalpunkt interpretiert wird, und das erste Vorkommen des Buchstabens “e” bzw. “E” (je nach Zeichensatz entsprechend CHR$(69)), gefolgt von einem optionalen Vorzeichen des dazugehörigen ganzzahligen Exponenten.
Sind keine verwertbaren Zeichen für eine Umwandlung in eine Zahl vorhanden, ist das Ergebnis die Zahl 0.
Werte unterhalb der Darstellungsgenauigkeit der Fließkommazahlen (Zahlen mit einem Absolutwert kleiner als 2.93873587440E-39) werden immer als 0 angesehen (abhängig von der Stellenanzahl, siehe auch Beispiele).
Mathematische Terme und Rechenoperationen werden nicht berücksichtigt.
Ist das Argument keine Zeichenkette, so erscheint die BASIC-Fehlermeldung ?TYPE MISMATCH ERROR. Für alle Zahlen außerhalb des Wertebereichs für Fließkommazahlen (−1.7014118345e+38 bis +1.7014118345e+38) wird die BASIC-Fehlermeldung ?OVERFLOW ERROR ausgegeben. Fehlt das Argument oder sind zu viele angegeben, folgt ein Abbruch mit der Meldung ?SYNTAX ERROR.
Beispiele
Syntax
PRINT VAL("A1") ergibt 0
PRINT VAL("- 1 2 3 . 2 3 4 e + 23") ergibt -1.23234e+25
PRINT VAL("1051 E-3 -1.051 C") ergibt 1.051
PRINT VAL(" .2 E3") ergibt 200
PRINT VAL("2 E 99") liefert Fehler ?OVERFLOW ERROR
PRINT VAL("-1.2345e-999") ergibt 0, da kleiner als die Darstellungsgenauigkeit für Fließkommazahlen
Größter Betrag
PRINT VAL("1.7014118345E+38")
zeigt den maximalen Betragswert 1.70141183e+38.
PRINT VAL("1.7014118346E+38")
liefert den Fehler ?OVERFLOW ERROR.
Kleinster Betrag
PRINT VAL("2.93873588E-39")
PRINT VAL("2.938735875E-39")
PRINT VAL("2.9387358754E-39")
PRINT VAL("2.93873587440E-39")
ergibt jeweils 2.93873588E-39, abhängig von der Stellenanzahl, wobei sich zusätzliche Stellen dann nicht mehr auswirken.
PRINT VAL("2.93873587E-39")
PRINT VAL("2.938735874E-39")
PRINT VAL("2.9387358753E-39")
PRINT VAL("2.93873587439E-39")
ergeben als nächstkleinere Zahl korrespondierend zu obigen Zeilen (bei entsprechender Stellenzahl) immer 0.