3. Umwandlungen zwischen Datenarten
Durch verschiedene Operationen sind Umwandlungen von einem Datentyp in einen anderen möglich.
Die Umwandlungsbefehle zwischen Strings und Zahlen sind
ASC / CHR$VAL /STR$
Sie sind unter diesen Namen beschrieben.
Hier soll nur auf die Umwandlung zwischen Gleitkomma- und Integerzahlen eingegangen werden:
Die Umwandlung von Integer in Gleitkomma ist immer möglich und hat auf den Wert keine Auswirkungen.
| Beispiel: | A = A% |
Die Umwandlung von Gleitkomma in Integer ist nur möglich, wenn die Gleitkommazahl im Integer-Bereich liegt:
| Beispiel: | 10 A = 20156 |
| 20 A%= A |
Ist dies nicht der Fall, wird ILLEGAL QUANTITY ERROR gemeldet.
| Beispiel: | 10 A = 50000 |
| 20 A%= A | |
| RUN ergibt ILLEGAL QUANTITY ERROR IN 20 |
Wenn der (positive) Gleitkommawert Nachkommastellen enthält, werden diese abgeschnitten, es wird also nicht gerundet:
| Beispiel: | 10 A = 123.256 |
| 20 A%= A | |
| 30 PRINT A% | |
| RUN ergibt 123 |
Exakter ausgedrückt, wird die nächstkleinere ganze Zahl gebildet. Dies ist bei negativen gebrochenen Zahlen zu beachten:
| Beispiel: | 10 A = -123.256 |
| 20 A%= A | |
| 30 PRINT A% | |
| RUN ergibt -124 |
(s. dazu auch den Abschnitt über numerische Ausdrücke)
Jede arithmetische und mathematische Operation wird auf Gleitkommabasis ausgeführt, es existiert also kein gesondertes Integer-Arithmetik-Paket!
Viele BASIC-Anweisungen haben Parameter, die keine gebrochenen Zahlen sein dürfen. Diese ganzzahligen Parameter können Integeroder Byteparameter sein. Da aber in BASIC jeder Parameter als beliebig komplexer Ausdruck auftreten kann, und Zahlenausdrücke auf Gleitkommabasis ausgewertet werden, wird das Ergebnis solcher Ausdrücke automatisch in Ganzzahl-Format umgewandelt. Da nun grundsätzlich nicht auszuschließen ist, dass in umfangreichen Gleitkommaoperationen sich die zwangsläufigen Rundungsfehler aufgrund der endlichen Mantisse bis in die neunte Stelle schleppen, können intern Ergebnisse wie
123.999999 anstatt 124auftreten. Beim Abschneiden auf Integerformat wird aus einem Fehler von 1E-6, der zu vernachlässigen wäre, ein Fehler von 1, der einen Algorithmus 'zu Fall bringen kann'.
Am Beispiel des Indexes von Feldvariablen können Sie dies leicht einsehen.
Sobald also ein Algorithmus bei Zwischenergebnissen die ganze Genauigkeit der Mantisse von 9 Stellen benötigt, muß an geeigneten Stellen durch Rundung (s. INT) dafür gesorgt werden, dass sich Fehler nicht fortpflanzen können!
In den meisten Fällen wird dies allerdings nicht nötig sein, weil Algorithmen, die ein maximal fünfstelliges Ergebnis liefern, selten mit neunstelligen Zwischenergebnissen arbeiten.
Wie man was macht
Durch verschiedene Operationen sind Umwandlungen von einem Datentyp in einen anderen möglich.
Die Umwandlungsbefehle zwischen Strings und Zahlen sind
ASC / CHR$