Probleme mit ValF() und ValD()

Für allgemeine Fragen zur Programmierung mit PureBasic.
SBond
Beiträge: 266
Registriert: 22.05.2013 20:35

Probleme mit ValF() und ValD()

Beitrag von SBond »

Folgendes Problem:

Code: Alles auswählen

sTestWert.s = "65.4321"
fBreitengrad_DezMinuten.f = ValF(sTestWert)
Debug fBreitengrad_DezMinuten ; Gibt 65.43209838867188 aus
wie kann ich dafür sorgen, dass die Werte korrekt konvertiert werden? Auch bei kürzeren Zahlen (z.B 10.23) und ValD() tritt das Problem auf.
Kennt jemand eine Lösung?
41 6c 73 6f 20 77 65 6e 6e 20 64 75 20 73 6f 20 76 69 65 6c 20 4c 61 6e 67 65 77 65 69 6c 65 20 68 61 73 74 2c 20 64 61 6e 6e 20 6b 61 6e 6e 73 74 20 64 75 20 61 75 63 68 20 67 6c 65 69 63 68 20 7a 75 20 6d 69 72 20 6b 6f 6d 6d 65 6e 20 75 6e 64 20 61 62 77 61 73 63 68 65 6e 2e

:D
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7031
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: Probleme mit ValF() und ValD()

Beitrag von STARGÅTE »

Alle Jahre wieder: Gleitkommazahl

Es gibt die Zahl 65.4321 oder 10.23 in der Fließkommadarstellung nicht, daher kann sie auch nicht dargestellt werden.
Es ist kein Fehler, wenn stattdessen 65.43209838867188 angezeigt wird, weil es die am nächsten liegenste Zahl ist.

ValD() zusammen mit Doubles kann das Problem sehrwohl verbessern, jedoch nie ganz beseitigen.

Code: Alles auswählen

sTestWert.s = "65.4321"
fBreitengrad_DezMinuten.d = ValD(sTestWert)
Debug fBreitengrad_DezMinuten
Ansonsten gilt für (z.B. Währungen) Ganzzahlen zu nutzen (Integer/Quad) und diese erst "zum Schluss" mit einem Komma versehen.
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
SBond
Beiträge: 266
Registriert: 22.05.2013 20:35

Re: Probleme mit ValF() und ValD()

Beitrag von SBond »

ok, ich danke dir.

Es hat mich verwundert, da es in der PureBasic Hilfe ein Beispiel gibt:

Code: Alles auswählen

Debug ValF("10.24") ; wird 10.24 ausgeben
...jedoch kommt da 10,2399... raus.

Ich dachte es läge an irgendwelchen Definitionen, Parametern oder Einstellungen. Dem ist ja dann nicht so.


nochmals Danke
41 6c 73 6f 20 77 65 6e 6e 20 64 75 20 73 6f 20 76 69 65 6c 20 4c 61 6e 67 65 77 65 69 6c 65 20 68 61 73 74 2c 20 64 61 6e 6e 20 6b 61 6e 6e 73 74 20 64 75 20 61 75 63 68 20 67 6c 65 69 63 68 20 7a 75 20 6d 69 72 20 6b 6f 6d 6d 65 6e 20 75 6e 64 20 61 62 77 61 73 63 68 65 6e 2e

:D
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8809
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: Probleme mit ValF() und ValD()

Beitrag von NicTheQuick »

Man kann mit StrF bzw. StrD dafür sorgen ab welcher Nachkommastelle gerundet werden soll. Dann wird auch das richtige angezeigt.
Antworten