Umwandlung eines Strings in eine Zahl

Anfängerfragen zum Programmieren mit PureBasic.
Andreas21
Beiträge: 390
Registriert: 30.08.2004 09:05
Computerausstattung: Desktop
Windows 10 Pro x64
CPU: AMD Ryzen 5 2600 3.40 GHz
Ram: 16GB RAM
Grafik: NVIDA Geforce 1060
PB: 5.72 X86/X64
Wohnort: Heidelberg

Re: Umwandlung eines Strings in eine Zahl

Beitrag von Andreas21 »

c4s hat geschrieben:Das seltsame Verhalten der Nachkommastellen gehört nun mal zu den Fließkommazahlen (in PureBasic Float bzw. Double). Mehr Informationen dazu sollten sich im Web, der PB-Hilfe oder dem Forum finden lassen.

Code: Alles auswählen

Debug ValF("1.2", 2)
ValF()

Syntax

Ergebnis.f = ValF(String$)
Beschreibung

Wandelt einen String in eine Fließkomma-Zahl um. Der String muss ein Fließkomma-Wert im Dezimalformat sein. Das Parsen (Suchen) nach Zahlen stoppt beim ersten nicht numerischen Zeichen.

Hinweis: Strings mit einer enthaltenen Ganzzahl können auch mit Val() und 64 Bit-Fließkommazahlen mit ValD() (mit höherer Genauigkeit als ValF()) konvertiert werden.
Beispiel

Debug ValF("10.24") ; wird 10.24 ausgeben

Unterstützte OS

Alle
Windows 10 x64 Pro - PB 5.61 X64 / x32 - PB 4.6 x32
Benutzeravatar
Daffy0815
Beiträge: 390
Registriert: 15.06.2005 00:44
Wohnort: 65719 Hofheim
Kontaktdaten:

Re: Umwandlung eines Strings in eine Zahl

Beitrag von Daffy0815 »

Tja, genau aus diesem Grund habe ich mir bei meinem Mikrocontroller-Basic eine BCD-Arithmetik in Assembler geschrieben.
Da gibt es diese Probleme systembedingt nicht.

Gruß

Daffy
Wir sind LINUX
Widerstand ist zwecklos - Sie werden emuliert
Benutzeravatar
NicknameFJ
Beiträge: 324
Registriert: 03.06.2007 14:36
Wohnort: Von der Sonne aus gesehen der dritte Planet

Re: Umwandlung eines Strings in eine Zahl

Beitrag von NicknameFJ »

Daffy0815 hat geschrieben:(...) BCD-Arithmetik in Assembler geschrieben. Da gibt es diese Probleme systembedingt nicht.
Was bringt BCD für Vorteile im Vergleich zur Nutzung von Integer?

Grüße NicknameFJ
PS: Alle im Text enthaltenen Schreibfehler sind beabsichtigt und dienen der Belustigung aller

Bild
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8808
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Re: Umwandlung eines Strings in eine Zahl

Beitrag von NicTheQuick »

Du kannst nicht BCD und Integer vergleichen. Aber mit BCD kannst du Integer kodieren. So machen es üblicherweise auch Taschenrechner. Einfach mal den wiki-Artikel unter BCD-Code lesen. Dann muss man hier nicht nochmal alles erklären.
Benutzeravatar
NicknameFJ
Beiträge: 324
Registriert: 03.06.2007 14:36
Wohnort: Von der Sonne aus gesehen der dritte Planet

Re: Umwandlung eines Strings in eine Zahl

Beitrag von NicknameFJ »

Danke NictheQuick,

aber was BCD ist war mir schon klar. Die Nachteile waren mir auch klar, höherer Speicherbrauch und langsamer.

Aber was für Vorteile bringt das im Vergleich zu Integer.

Das konnte ich dem Wiki Artikel nicht entnehmen, vielleicht bin ich aber auch nur betriebsblind.


Grüße

NicknameFJ
PS: Alle im Text enthaltenen Schreibfehler sind beabsichtigt und dienen der Belustigung aller

Bild
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8808
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Re: Umwandlung eines Strings in eine Zahl

Beitrag von NicTheQuick »

Bei Integern bringt dir die BCD-Kodierung keine Vorteile, bei Floats allerdings schon, da damit gewährleistet wird, dass 10.42 auch nach Speichern und wieder Laden immer noch 10.42 und nicht 10.420000000019852 oder ähnliches.
DarkDragon
Beiträge: 6291
Registriert: 29.08.2004 08:37
Computerausstattung: Hoffentlich bald keine mehr
Kontaktdaten:

Re: Umwandlung eines Strings in eine Zahl

Beitrag von DarkDragon »

Noch eine kleine Nebenbemerkung (kennt vielleicht nicht jeder): http://www.math.uni-konstanz.de/numerik ... eratur.php => "Numerisches Rechnen" unter "Verknupfung von Gleitkommazahlen" steht
Die Subtraktion zweier ungefahr gleich großer Zahlen ist numerisch instabil: kleine Fehler in den Summanden konnen zu einem großen Fehler im Ergebnis führen
Angenommen es gäbe einen Algorithmus mit imaginärer Laufzeit O(i * n), dann gilt O((i * n)^2) = O(-1 * n^2) d.h. wenn man diesen Algorithmus verschachtelt ist er fertig, bevor er angefangen hat.
Antworten