Richtig rechnen mit PB

Anfängerfragen zum Programmieren mit PureBasic.
Gamer
Beiträge: 180
Registriert: 21.03.2005 16:59

Richtig rechnen mit PB

Beitrag 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?
Benutzeravatar
FISCHAUGE
Beiträge: 108
Registriert: 25.03.2005 21:07
Wohnort: Karlsruhe
Kontaktdaten:

Beitrag 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!

:lol:
Na alles Senkrecht?
Benutzeravatar
Laurin
Beiträge: 1639
Registriert: 23.09.2004 18:04
Wohnort: /dev/eth0

Beitrag 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.
Now these points of data make a beautiful line.
And we're out of beta. We're releasing on time.
Benutzeravatar
redacid
Beiträge: 581
Registriert: 29.08.2004 17:06

Beitrag 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.
Benutzeravatar
125
Beiträge: 1322
Registriert: 19.09.2004 16:52
Wohnort: Neu Wulmstorf (Hamburg)
Kontaktdaten:

Beitrag 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? :shock:
Können CPUs sich neuerdings verrechnen? :shock:
Gamer
Beiträge: 180
Registriert: 21.03.2005 16:59

Beitrag von Gamer »

gesamt.l + betrag.f

MessageRequester("",Str(gesamt),1)

Da kommen bei mir aber nur Ergebnisse ohne Komma raus :(
Benutzeravatar
Ynnus
Beiträge: 855
Registriert: 29.08.2004 01:37
Kontaktdaten:

Beitrag 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? :shock:
Können CPUs sich neuerdings verrechnen? :shock:
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.
Zuletzt geändert von Ynnus am 05.04.2005 15:51, insgesamt 1-mal geändert.
Benutzeravatar
Ynnus
Beiträge: 855
Registriert: 29.08.2004 01:37
Kontaktdaten:

Beitrag 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. ;)
Gamer
Beiträge: 180
Registriert: 21.03.2005 16:59

Beitrag von Gamer »

Ist das nun so richtig:

betrag.l = ValF(StringField(DateiInhalt.s(i),5,"|"))
Benutzeravatar
freedimension
Admin
Beiträge: 1987
Registriert: 08.09.2004 13:19
Wohnort: Ludwigsburg
Kontaktdaten:

Beitrag von freedimension »

125 hat geschrieben: Seit wann führen Floats zu ungenauigkeit? :shock:
Können CPUs sich neuerdings verrechnen? :shock:
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.
Beginne jeden Tag als ob es Absicht wäre!
Bild
BILDblog
Antworten