Seite 1 von 4
Richtig rechnen mit PB
Verfasst: 05.04.2005 13:46
von Gamer
Ich hab hier mehrere Beträge (mit Komma) die ich zusammenzählen will.
1) Müssen diese Beträge mit Punkt oder Komma getrennt werden?
2) Als Variable für die Gesamtsumme reicht z.b. gesamt.f oder?
3) Rundet PB automatisch?
Verfasst: 05.04.2005 14:13
von FISCHAUGE
Also zu 1.
Du musst die Zahlen mit (.) Trennen, zumindest wenn du es in einer Console schreibst! (So war es ja auch in BASIC)
zu 2.
Als Varibael kannst du (gesamt.f)nehmen reicht auf jedenfall!
zu 3.
Ich bin mir ziemlich sicher das du das Runden der zahlen selbst einstellen kannst! Leider habe ich von dem Runden keine ahnung!
Aber im Codearichv findest du unter (MATH) eine menge rechen beispiele villeicht solltest du dort auch mal nachschlagen!

Verfasst: 05.04.2005 14:23
von Laurin
zu 3: PB rundet schon, aber erst die 10. Stelle (oder mehr) nach dem Komma. Da kann PB aber nichts dafür, das ist eine Beschränkung von Kommazahlen und technisch bedingt. Wenn du nicht gerade alle Sandkörner der Sahara ausrechnen willst, langt das aber allemal.
Verfasst: 05.04.2005 15:20
von redacid
wenn du mit Geldbeträgen arbeiten willst (+ und -), kannst du auch besser einfache long-Variablen nehmen und in Cent rechnen. Also statt "12.99 + 23.45 = 36.44 Euro" einfach 1299 + 2345 = 3644 Cent. So umgehst du die Float-Variable, die früher oder später zu Ungenauigkeiten führen kann. Bei der Ausgabe auf dem Bildschirm rechnest du einfach durch 100.
Verfasst: 05.04.2005 15:29
von 125
redacid hat geschrieben:wenn du mit Geldbeträgen arbeiten willst (+ und -), kannst du auch besser einfache long-Variablen nehmen und in Cent rechnen. Also statt "12.99 + 23.45 = 36.44 Euro" einfach 1299 + 2345 = 3644 Cent. So umgehst du die Float-Variable, die früher oder später zu Ungenauigkeiten führen kann. Bei der Ausgabe auf dem Bildschirm rechnest du einfach durch 100.
Seit wann führen Floats zu ungenauigkeit?
Können CPUs sich neuerdings verrechnen?

Verfasst: 05.04.2005 15:44
von Gamer
gesamt.l + betrag.f
MessageRequester("",Str(gesamt),1)
Da kommen bei mir aber nur Ergebnisse ohne Komma raus

Verfasst: 05.04.2005 15:45
von Ynnus
125 hat geschrieben:redacid hat geschrieben:wenn du mit Geldbeträgen arbeiten willst (+ und -), kannst du auch besser einfache long-Variablen nehmen und in Cent rechnen. Also statt "12.99 + 23.45 = 36.44 Euro" einfach 1299 + 2345 = 3644 Cent. So umgehst du die Float-Variable, die früher oder später zu Ungenauigkeiten führen kann. Bei der Ausgabe auf dem Bildschirm rechnest du einfach durch 100.
Seit wann führen Floats zu ungenauigkeit?
Können CPUs sich neuerdings verrechnen?

Das Binärsystem hat Probleme mit langen Nachkommastellen. Schau dir dazu die Hilfedatei an, den Abschnitt zu den Variablentypen.
Und ja, PCs können sich verrechnen. Der alte Pentium 1 hatte zum Teil Rechenfehler.
//edit:
PB Helpfile hat geschrieben: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.
Verfasst: 05.04.2005 15:47
von Ynnus
Gamer hat geschrieben:gesamt.l + betrag.f
MessageRequester("",Str(gesamt),1)
Da kommen bei mir aber nur Ergebnisse ohne Komma raus

Dafür gibts auch "Strf" für Floats anstelle von Str.

Verfasst: 05.04.2005 15:49
von Gamer
Ist das nun so richtig:
betrag.l = ValF(StringField(DateiInhalt.s(i),5,"|"))
Verfasst: 05.04.2005 15:53
von freedimension
125 hat geschrieben:
Seit wann führen Floats zu ungenauigkeit?
Können CPUs sich neuerdings verrechnen?

Hihi, in dieser Form ungefähr seit 1985
Wenn du wissen möchtest wie Floats aufgebaut sind findest du hier einen interessanten und sehr anschaulichen Link:
http://babbage.cs.qc.edu/courses/cs341/IEEE-754.html
Ehrlich gesagt wundert es mich, dass du das noch nicht mitbekommen hast, bist doch immerhin auch schon seit September letzten Jahres dabei.