Seite 2 von 4

Verfasst: 05.04.2005 15:58
von Gamer

Code: Alles auswählen

Datei.s="aus|1&1|03.01.2002|domain|35.64|16"

betrag.l = ValF(StringField(Datei.s,5,"|"))

; gesamt.l + betrag.l

MessageRequester("",StrF(betrag.l),1)
So und wieso wird nicht 35.64 Euro ausgegeben?

Verfasst: 05.04.2005 16:08
von Rubiko
weil betrag als "long" variable gespeichert ist
änder L in F(f) dann isses float und es wird
35.6399999 ausgegeben

Verfasst: 05.04.2005 16:09
von freedimension
Gamer hat geschrieben: So und wieso wird nicht 35.64 Euro ausgegeben?
Du musst weiterhin beachten, dass StrF nicht rundet sondern einfach ab der gewünschten Anzahl an Stellen abschneidet.

35.64 wird gespeichert als 35.6399999 (das ist die Ungenauigkeit dieses Standards, nicht von PB). Schneidest du nun ab der zweiten Stelle ab, erhältst du 35.63. Korrigieren lässt sich dies durch ein zusätzliches +0.5

Code: Alles auswählen

a.f = 35.64
Debug StrF(a + 0.5, 2)

Verfasst: 05.04.2005 16:10
von Ynnus
Gamer hat geschrieben:

Code: Alles auswählen

Datei.s="aus|1&1|03.01.2002|domain|35.64|16"

betrag.l = ValF(StringField(Datei.s,5,"|"))

; gesamt.l + betrag.l

MessageRequester("",StrF(betrag.l),1)
So und wieso wird nicht 35.64 Euro ausgegeben?
Weil du versuchst, eine Gleitkommazahl in eine Integer-Zahl zu pressen. Dadurch entfallen die Gleitkommazahlen. Die Variable betrag muss schon vom Typ float sein, sonst lässt er logischer Weise die Nachkommastellen wegfallen, da hilft dann auch kein StrF mehr. ;)

Verfasst: 05.04.2005 16:12
von Gamer
Und warum gibt er bei 210.51 dann 210.509995 aus?

Verfasst: 05.04.2005 16:13
von Gamer
freedimension hat geschrieben:
Gamer hat geschrieben: So und wieso wird nicht 35.64 Euro ausgegeben?
Du musst weiterhin beachten, dass StrF nicht rundet sondern einfach ab der gewünschten Anzahl an Stellen abschneidet.

35.64 wird gespeichert als 35.6399999 (das ist die Ungenauigkeit dieses Standards, nicht von PB). Schneidest du nun ab der zweiten Stelle ab, erhältst du 35.63. Korrigieren lässt sich dies durch ein zusätzliches +0.5

Code: Alles auswählen

a.f = 35.64
Debug StrF(a + 0.5, 2)
Okay aber soll ich das auf den Gesamtbetrag anwenden oder bei JEDEM Betrag der addiert wird?

Verfasst: 05.04.2005 16:13
von Rubiko
irgendwie erscheint mir logisch das du es bei jedem machst... da du die kommazahlen ja dann beim gesamtbetrag mit reinbekommst

Verfasst: 05.04.2005 16:18
von 125
machs dir einfacher und save die ganzen Zahlen als Longs und rechne mit Cents und teil sie einfach für die Auswertung durch 100(->Euros) (setz nen . vor die letzten 2 Stellen)

Hier nen bsp.

Code: Alles auswählen

Datei.s="aus|1&1|03.01.2002|domain|35.64|16" 

betrag$ = ReplaceString(StringField(Datei.s,5,"|"),".","")

Procedure.s EuroLongStringToFloatString(betrag$)
Protected betrag$
ProcedureReturn Mid(betrag$,0,Len(betrag$)-2)+"."+Mid(betrag$,Len(betrag$)-2,2)
EndProcedure

MessageRequester("",EuroLongStringToFloatString(betrag$),1)

Verfasst: 05.04.2005 16:23
von Gamer
Wie aber soll ich Strings addieren??? Vergleich mal Dein Ergebnis mit dem Originalbetrag!

Außerdem das hier liefert auch ein falsches Ergebnis:

Code: Alles auswählen

a.f = 35.64 
Debug StrF(a + 0.5, 2) 

Verfasst: 05.04.2005 16:26
von traumatic
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) 
Wassn daran falsch? 35.64 + 0.5 = 36.14 ! Was kommt denn bei Dir raus?