Diese Beträge werden auf Knopfdruck mit anderen Zahlen in der Zeile verrechnet und das Ergebnis wieder in die Zeile eingetragen.
Dabei ist jede zehntel Sekunde wertvoll, denn Warten ist ätzend.
Rechne darum in Cent und zur Umwandlung hier einige Beispiele mit MwSt, Frage: geht es noch schneller oder bei gleicher Leistung einfacher ?
Code: Alles auswählen
#zahllg = 15
Structure Betrag
StructureUnion
euro.s{#zahllg}
c.c[0] ;wird hier nur für die Prüfung auf vorhandenen Punkt benutzt
EndStructureUnion
euromw1.s{#zahllg}
euromw2.s{#zahllg}
euromw3.s{#zahllg}
EndStructure
max = 25000
;Betrag in Euro wird in Cent umgewandelt
;+ 19 % Mehrwertsteuer
;Cent zurück in Euro
;Methode mit CopyMemory inclusive Test auf vorhandenen Punkt
a=GetTickCount_()
For j = 1 To max
wert.Betrag\euro = RSet("123.45",#zahllg) ;RSet(...) könnte aus einer Tabelle kommen
If wert\c[#zahllg-3] = 46
CopyMemory(@wert\euro,@wert\euro+1,#zahllg - 3)
cent = Val(wert\euro) * 1.19
Else
;Fehler kein Punkt vorhanden
EndIf
wert\euromw1 = RSet(Str(cent),#zahllg)
CopyMemory(@wert\euromw1+1,@wert\euromw1,#zahllg - 2)
PokeC(@wert\euromw1+#zahllg-3,'.') ;wert\euromw1 könnte in eine Tabelle geschrieben werden
Next
b=GetTickCount_()-a
;meine normale Methode
a=GetTickCount_()
For j = 1 To max
string$ = "123.45"
cent = ValF(string$) * 119
euro$ = Str(cent)
lg = Len(euro$)
euro$ = Left(euro$,lg-2)+"."+Right(euro$,2)
wert\euromw2 = RSet(euro$,#zahllg)
Next
c=GetTickCount_()-a
;mit Float
a=GetTickCount_()
For j = 1 To max
string$ = "123.45"
euro.f = ValF(string$) * 1.19
euro$ = StrF(euro.f)
wert\euromw3 = RSet(euro$,#zahllg)
Next
d=GetTickCount_()-a
MessageRequester("", wert\euromw1+"="+Str(b)+#LF$ + wert\euromw2+"="+Str(c)+#LF$ + wert\euromw3+"="+Str(d)+#LF$)