Seite 2 von 2

Verfasst: 30.05.2009 00:05
von Kaeru Gaman
Quads sind ganz normale integer, bloß doppelt so groß wie Long.
also anstatt Zahlen von -2^31 bis 2^31-1 speichern zu können,
können sie Zahlen von -2^63 bis 2^63-1 speichern.

mit Longs würde das selbe für die Genauigkeit gelten, aber eben nur bis zu Betragssummen von ±2.147.483,648€

Bedenke auch, dass du um Prozente zu rechnen, erst mit den Prozent multiplizieren und dann durch Hundert teilen solltest, nicht umgekehrt.

Demo:

Code: Alles auswählen

Debug "richtig:"
Betrag = 123456
Debug Betrag
Steuer = Betrag * 10 / 100
Debug Steuer
Summe  = Betrag + Steuer
Debug Summe

Debug "falsch:"
Betrag = 123456
Debug Betrag
Steuer = Betrag / 100 * 10
Debug Steuer
Summe  = Betrag + Steuer
Debug Summe

Verfasst: 30.05.2009 00:47
von Rebon
Kaeru Gaman hat geschrieben: Bedenke auch, dass du um Prozente zu rechnen, erst mit den Prozent multiplizieren und dann durch Hundert teilen solltest, nicht umgekehrt.
Und nochmal merci! :allright:
Du hast mir mit Sicherheit sehr viel Arbeit erspart! :)

Verfasst: 30.05.2009 01:31
von Rebon
Kaeru Gaman hat geschrieben:Quads sind ganz normale integer, bloß doppelt so groß wie Long.
Mein Fehler, werde in Zukunft nicht mehr editieren:
Edit: Ich hab mich in der Help von PB verlesen, muß mich nicht über Quads informieren.
Hab da was mit BinQ bzw. dem Binärformat gelesen.
So, ich glaube jetzt ist die Fließkommazahl, dank deiner Hilfe sicher,
hab jetzt ein einfacheres Beispiel geschrieben:

Code: Alles auswählen

Zahl$ = "22.95"

Wert.q = ValD(Zahl$) * 100

Wert.q * 2

Debug StrD(Wert.q / 100, 2)

End

Verfasst: 30.05.2009 02:02
von Kaeru Gaman
ok.

du kannst natürlich die Double benutzen, um den String umzuformen, hin und her...
gar nicht so übel, aber auch nicht ungefährlich.

in dieser zeile:
Wert.q = ValD(Zahl$) * 100
wird erst mit 100 multipliziert bevor der Wert der Quad zugewiesen wird.
also, das ist gut und wichtig: erst eine Double draus machen,
dann mit hundert multiplizieren, und erst dann der Quad zuweisen.

umgekehrt genauso: StrD(Wert.q / 100, 2)
durch die Funktion wird die Quad erst zu einer Double gecasted,
dann kommt die Teilung durch hundert.

also, immer sicherstellen, dass die Schritte die richtige Reihenfolge haben! :allright:


andererseits, du kannst auch einfache stringoperationen benutzen.

also, einfach das Komma aus dem String entfernen, dann hast du direkt Cents ohne Komma,
und das dann mit ValQ der Quad zuweisen.

umgekehrt erst nen string draus machen, dann "manuell" das Komma einfügen.

eventuell ist das sogar eher die passende Lösung,
weil du dann auch Tausender-Trennzeichen einfügen kannst und verwalten kannst... ;)

Verfasst: 30.05.2009 02:19
von Rebon
Kaeru Gaman hat geschrieben: also, einfach das Komma aus dem String entfernen, dann hast du direkt Cents ohne Komma,
und das dann mit ValQ der Quad zuweisen.
Du hast so recht! :allright:
Ich dachte weil die Vorkommazahl eine unbekannte Größe ist,
hätte ich ein Problem, das Komma richtig zu setzen.
Aber da es ja immer zwei Nachkommastellen sind
ist es kein Problem. :)

Verfasst: 30.05.2009 03:21
von Rebon
Ich hatte vergessen, bei Len() das -1 herauszunehmen, deshalb hat's
länger gedauert.
Es funktioniert! :allright:

Code: Alles auswählen

Zahl$ = "22,95"

Wert.q = ValQ(ReplaceString(Left(Zahl$, Len(Zahl$)), ",", "")) 

Wert.q * 2

Zahl$ = ReplaceString(StrQ(Wert.q), Right(StrQ(Wert.q), 2), "," + Right(StrQ(Wert.q), 2)) 

Debug Zahl$ 

End