Habe folgendes Problem :
Folgender Wert 2173422,39 aus feldinhalt$
wird in A$ geschrieben als 2173422.39 (Komma in Dezimalpunkt)
A$=ReplaceString(Right(feldinhalt$,Len(feldinhalt$)-10),",",".")
Anfangssaldo.f=ValF(A$) ; umwandeln in Flieskomma-Variable
PrintN (A$+" " + StrF(Anfangssaldo.f)
Console zeigt : 2173422,39 2173422,500000
Frage 1: Warum ist die Zahl nicht gleich ?
Frage 2: Wie kann ich die richtige Zahl anzeigen lassen?
Frage 3: Wenn ich diese Zahl mit -1 multipliziere
Anfangssaldo.f=ValF(A$) *-1
dann wird das ignoriert, weil ich den falschen Befehl
STRF(..) verwende. Gibt es einen Befehl der
negative Fließkomma-Zahlen richtig anzeigt / wandelt?
Probleme mit dem Wandeln von Variablen STRF() VALF()
Probleme mit dem Wandeln von Variablen STRF() VALF()
Mit Ostsee-Grüßen
René
René
Fließkommazahlen sind für kommagenaue Berechnungen nicht verwendbar. Ich nehme aufgrund des Wortes Saldo an,
daß es sich um Geldbeträge handelt. Floats sind hier grundsätzlich nicht zu verwenden.
Genaue Auskunft gibt die Hilfe
longs. Hier wäre die maximale Größe der longs zu beachten:
-2147483648 bis +2147483647
Können diese Grenzen überschritten werden (Centbeträge!), dann
muß für die Summen auf eine Userlib zurückgegriffen werden, z.B.
die F64Lib. http://www.purearea.net/pb/download/userlibs/F64.zip
Grundsätzlich sollte man bei Verwendung von Userlibs prüfen,
ob diese mit der neuesten Version von PB arbeitet, sonst kann man eventuell ein
Update vom Autor erbitten oder eine ältere PB-Version benutzen.
Cu von Team100
daß es sich um Geldbeträge handelt. Floats sind hier grundsätzlich nicht zu verwenden.
Genaue Auskunft gibt die Hilfe
Abhilfe ist die Wandlung in Centbeträge und das Verwenden vonSpezielle Informationen über Fließkommazahlen (Floats)
Eine Fließkomma-Zahl (auch Gleitkomma-Zahl, englisch: Floating Point Number) wird in einer Art und Weise gespeichert, die den Binär-Punkt (trennt "Ganzzahlteil" vom "Kommateil") innerhalb der Zahl "gleiten" lässt, wodurch das Speichern sehr großer aber auch sehr kleiner Zahlen (mit vielen Nachkommastellen) möglich wird. Wie auch immer, Sie können nicht sehr große Zahlen mit gleichzeitig sehr hoher Genauigkeit (sozusagen große und kleine Zahlen zur selben Zeit) speichern. Eine weitere Einschränkung von Fließkomma-Zahlen ist, dass sie stets im Binärmodus arbeiten, weshalb sie nur die Zahlen exakt speichern können, welche mittels Multiplikation oder Division mit 2 ermittelt werden können. Dies ist insbesondere wichtig zu wissen, wenn Sie versuchen, eine Fließkommazahl in einer visuell lesbaren Form darzustellen (oder mit ihr Rechenoperationen auszuführen) - das Speichern von Zahlen wie 0.5 oder 0.125 ist einfach, da sie Divisionen von 2 sind. Das Speichern von Zahlen wie 0.1 ist schwieriger, diese wird möglicherweise als Zahl 0.9996125 gespeichert. Sie können versuchen, nur eine begrenzte Anzahl an (Nachkomma-) Stellen darzustellen, seien Sie aber nicht überrascht, wenn die Darstellung der Zahl anders aussieht, als Sie dies erwarten!
Dies gilt für alle Fließkomma-Zahlen, nicht nur die in PureBasic.
longs. Hier wäre die maximale Größe der longs zu beachten:
-2147483648 bis +2147483647
Können diese Grenzen überschritten werden (Centbeträge!), dann
muß für die Summen auf eine Userlib zurückgegriffen werden, z.B.
die F64Lib. http://www.purearea.net/pb/download/userlibs/F64.zip
Grundsätzlich sollte man bei Verwendung von Userlibs prüfen,
ob diese mit der neuesten Version von PB arbeitet, sonst kann man eventuell ein
Update vom Autor erbitten oder eine ältere PB-Version benutzen.
Cu von Team100
Kompliziert kann es jeder lösen, aber das wirklich Geniale ist einfach.....
-
- Beiträge: 17389
- Registriert: 10.11.2004 03:22
genauer:
Team100 meint, grundsätzlich mit dem hundertfachen zu rechnen,
in ganzzahlen, und bei der ausgabe das komma einzufügen.
die obergrenze für einen betrag wäre dann +/- 21.474.836,47
zur hilfe zum umwandeln folgende Procedures:
Team100 meint, grundsätzlich mit dem hundertfachen zu rechnen,
in ganzzahlen, und bei der ausgabe das komma einzufügen.
die obergrenze für einen betrag wäre dann +/- 21.474.836,47
zur hilfe zum umwandeln folgende Procedures:
Code: Alles auswählen
Procedure.l Str2Lng(Feld.s)
Euro = Val(Feld)
Cent = Val(Right(Feld,2))
ProcedureReturn 100*Euro+Cent
EndProcedure
Procedure.s Lng2Str(Zahl.l)
Euro.l = Zahl/100
Cent.l = Zahl-100*Euro
ProcedureReturn Str(Euro)+","+Str(Cent)
EndProcedure
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Der Weise weiß, dass er ein Narr ist.
Danke, Userlib F64 hat geholfen
Danke für Eure Antworten.
Die Lösung von Team100 hat mit nun geholfen. Die zweite Lösung Euro und Cent zu trennen ist auch okay, aber bei Zinsberechnungen sind mehrere Nachkommastellen unabdingbar.
F64_Val(Anfangssaldo.double,"-"+A$)
PrintN (Anfangssaldo$+" " + F64_Str(Anfangssaldo.double))
Ich habe die Userlib geladen und in Purebasic eingebunden.
Die o.a. neuen Befehle arbeiten im Standard schon mit sechs Nachkommastellen (erweiterbar).
Vielen Dank für Eure Mühe und die guten Lösungsansätze.
Die Lösung von Team100 hat mit nun geholfen. Die zweite Lösung Euro und Cent zu trennen ist auch okay, aber bei Zinsberechnungen sind mehrere Nachkommastellen unabdingbar.
F64_Val(Anfangssaldo.double,"-"+A$)
PrintN (Anfangssaldo$+" " + F64_Str(Anfangssaldo.double))
Ich habe die Userlib geladen und in Purebasic eingebunden.
Die o.a. neuen Befehle arbeiten im Standard schon mit sechs Nachkommastellen (erweiterbar).
Vielen Dank für Eure Mühe und die guten Lösungsansätze.
Mit Ostsee-Grüßen
René
René