Seite 1 von 2
FLoat Zahl mit zwei Nachkommastellen
Verfasst: 12.10.2012 19:00
von Pure_Beginner
Hallo zusammen,
Hätte mal eine Frage zu Fließkomma-variablen.
Ist es möglich diese auf zwei Nachkommastellen zu beschränken.
Eleganter als in meinem code ?
Ohne in einen String zu wandeln ?
Grüße
Christian
Re: FLoat Zahl mit zwei Nachkommastellen
Verfasst: 12.10.2012 19:22
von Josh
Code: Alles auswählen
Define Summe.f = 3.144992654
Summe = Round (Summe * 100, #PB_Round_Nearest) / 100
Debug Summe
Scheint aber hier etwas ungenau. Mit einer reinen Int Lösung wird es auch nicht besser

Re: FLoat Zahl mit zwei Nachkommastellen
Verfasst: 12.10.2012 19:30
von STARGÅTE
Pure_Beginner hat geschrieben:Ist es möglich diese auf zwei Nachkommastellen zu beschränken.
Vermutlich möchtest du mit Geld rechnen? Dann nimmt bitte lieber Integers (also Ganzzahlen) und rechne in Cent oder so.
So hast du exakte Rechungen und kannst sehr einfach die Zahl anzeigen lassen.
FLießkommazahlen haben immer die "blöde" eigenschaft, das sich größe und kleine Zalen nicht vertragen und dir bei großen Geldbeträgen die Cents einfach verloren gehen.
Re: FLoat Zahl mit zwei Nachkommastellen
Verfasst: 12.10.2012 20:06
von Pure_Beginner
Danke für eure Antworten.
@STARGÅTE
was bedeutet große und kleine Zahlen die Cents gehen verloren ?
Rechnet PB nicht richtig ?
Re: FLoat Zahl mit zwei Nachkommastellen
Verfasst: 12.10.2012 20:15
von STARGÅTE
Das liegt nicht an PB, sondern an der Natur von Fließkommazahlen:
Code: Alles auswählen
Value.f = 1.99
Debug Value
Value + 10000000
Debug Value
Natürlich kannst du auch Doubles verwenden, führ aber zum selbem Problem (nur halt später bei noch größeren Zahlen).
Aber vllt sagt du erst mal, warum du "genau" 2 Nachkommastellen brauchst.
Re: FLoat Zahl mit zwei Nachkommastellen
Verfasst: 12.10.2012 20:50
von Pure_Beginner
@STARGÅTE
hab's begriffen.
die Nachkommastelle brauche ich um mit Eurobeträgen zu rechnen und anzuzeigen.
Plötzlich finde ich das wandeln in eine Stringt überhaupt nicht mehr so schlecht.
Grüße und schönes Wochenende
Christian
Re: FLoat Zahl mit zwei Nachkommastellen
Verfasst: 12.10.2012 21:40
von STARGÅTE
Ich würde dir aber trotzdem raten mit Cents zu arbeiten.
Auch die Ausgabe ist mit einer Prozedur schnell gemacht:
Code: Alles auswählen
Procedure.s Get(Cent.q)
ProcedureReturn InsertString(Str(Cent), ",", Len(Str(Cent))-1)+" €"
EndProcedure
Debug Get(199)
Aber es ist natürlich deine Entscheidung, ich möchte hier nur Alternativen zeigen.
Re: FLoat Zahl mit zwei Nachkommastellen
Verfasst: 12.10.2012 22:00
von NicknameFJ
STARGÅTE hat geschrieben:
Aber es ist natürlich deine Entscheidung, ich möchte hier nur Alternativen zeigen.
Nicht nur Alternativen.
Auch wenn das Ergebnis nach Umwandlung in einen String richtig angezeigt wird wird intern nach wie vor mit dem falschen Ergebnis weitergerechnet.
Beim Rechnen mit Float´s können sich dadurch die entstandenen Fehler auch aufsummieren.
Daher in kaufmännischen Anwendungen immer mit Ganzzahlen in Cent rechnen. Alles andere ist - Entschuldigung - reiner Pfusch.
Grüße
NicknameFJ
Re: FLoat Zahl mit zwei Nachkommastellen
Verfasst: 12.10.2012 22:26
von Pure_Beginner
Danke für eure Mühe und die Beispiele.
Werde mich dran halten.
Schönes Wochenende
Christian
Re: FLoat Zahl mit zwei Nachkommastellen
Verfasst: 13.10.2012 23:39
von Falko
Hab auch noch ein kleines Beispiel in beiden Richtungen
(Punkt kann man in Komma abändern):
Code: Alles auswählen
Global cent.s
Global euro.s
Procedure.s Euro2Cent(euro.s)
If FindString(euro,".")
ProcedureReturn RemoveString(euro,".")
Else
ProcedureReturn Str(Val(euro)*100)
EndIf
EndProcedure
Procedure.s Cent2Euro(cent.s)
Euros.s=Str(Val(cent)/100)
Euros+","+ Str(Val(cent) % 100)
ProcedureReturn Euros.s
EndProcedure
Debug Euro2Cent("10.12") + " Cent"
Debug Cent2Euro("19921") + " Euro"