Code: Alles auswählen
betrag.f = 250.51
gesamt.f + (betrag.f+0.00005)
Debug gesamt.f
Code: Alles auswählen
betrag.f = 250.51
gesamt.f + (betrag.f+0.00005)
Debug gesamt.f
Ich will 35.64 raushaben! Und nicht 35.63999 oder 36.14 (total falsch)!traumatic hat geschrieben:Wassn daran falsch? 35.64 + 0.5 = 36.14 ! Was kommt denn bei Dir raus?Gamer hat geschrieben:Außerdem das hier liefert auch ein falsches Ergebnis:
Code: Alles auswählen
a.f = 35.64 Debug StrF(a + 0.5, 2)
Er wollte doch nur zeigen wie man korrekt mit Strings rechnen kann...Gamer hat geschrieben:Ich will 35.64 raushaben! Und nicht 35.63999 oder 36.14 (total falsch)!traumatic hat geschrieben:Wassn daran falsch? 35.64 + 0.5 = 36.14 ! Was kommt denn bei Dir raus?Gamer hat geschrieben:Außerdem das hier liefert auch ein falsches Ergebnis:
Code: Alles auswählen
a.f = 35.64 Debug StrF(a + 0.5, 2)
Ich verstehe Dich nicht, ist doch alles richtig!?Gamer hat geschrieben:Ich will 35.64 raushaben! Und nicht 35.63999 oder 36.14 (total falsch)!traumatic hat geschrieben:Wassn daran falsch? 35.64 + 0.5 = 36.14 ! Was kommt denn bei Dir raus?Gamer hat geschrieben:Außerdem das hier liefert auch ein falsches Ergebnis:
Code: Alles auswählen
a.f = 35.64 Debug StrF(a + 0.5, 2)
Code: Alles auswählen
a.f = 35.64
Debug StrF(a, 2) ; korrekt! => 35.64
Debug StrF(a+0.5,2) ; korrekt! => 36.14
...deshalb auch die ganzen Vorschläge hier.PB Helpfile hat geschrieben: Spezielle 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.
Code: Alles auswählen
Procedure.s LStringToFString(betrag$)
Protected betrag$
ProcedureReturn Mid(betrag$,0,Len(betrag$)-2)+"."+Mid(betrag$,Len(betrag$)-1,2)
EndProcedure
Procedure.s FStringToLString(betrag$)
Protected betrag$
ProcedureReturn ReplaceString(betrag$,".","")
EndProcedure
Datei.s="aus|1&1|03.01.2002|domain|35.64|16"
Gesamt.l=Val(FStringToLString("57.68")); Rechnet die 57 Euro 68 Cents in 5768 Cents um
betrag$ = FStringToLString(StringField(Datei.s,5,"|"))
Betrag.l=Val(betrag$)
Saldo.l=Gesamt+Betrag
MessageRequester("Ihr Saldo:","Ihr Saldo:"+ LStringToFString(Str(Saldo)))
Code: Alles auswählen
For i=0 To ZeilenAnzahl.l
; hier wird ein array durchgelaufen und immer ein "betrag" ermittelt
; hier wird der betrag zu "gesamt" hinzugefügt
Next
MessageRequester("Ihr Saldo:","Ihr Saldo:"+ LStringToFString(Str(Saldo)))
Code: Alles auswählen
Procedure.s LStringToFString(betrag$)
Protected betrag$
ProcedureReturn Mid(betrag$,0,Len(betrag$)-2)+"."+Mid(betrag$,Len(betrag$)-1,2)
EndProcedure
Procedure.s FStringToLString(betrag$)
Protected betrag$
ProcedureReturn ReplaceString(betrag$,".","")
EndProcedure
For i=0 To ZeilenAnzahl.l
;Datei.s=Array(i) ;Gettet die Daten aus deinem Arry (sieht bei dir wahrscheinlich anders aus...)
Betrag.l=Val(FStringToLString(StringField(Datei.s,5,"|"))) ;Aus dem String Datei.s wird nun der betrag in Cents Gepseichert.
Gesamt+Betrag
Next
MessageRequester("Insgesamt","Insgesamt:"+ LStringToFString(Str(Gesamt)))