formatierte Zahl mit 100 malnehmen, wie gehts schneller
Verfasst: 01.05.2008 10:53
ich habe eine Liste mit mehr als 5000 Zeilen. In den Zeilen stehen formatierte Beträge z.B. 10.20
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 ?
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$)