Addition von Dezimalzahlen mit Nachkommastellen

  • hallo,
    irgendwie verzweifel ich gerade...

    ich möchte 2 zahlen in einer Schleife addieren:

    [autoit]


    dim $z1 = "0.00"

    [/autoit][autoit][/autoit][autoit]

    for i = .....
    $z1_Aktuell = StringMid($line, 32, 16))

    [/autoit][autoit][/autoit][autoit]

    msgbox(4096, "", $z1 & " + " & $z1_Aktuell & @CRLF & _
    "$z1 + $z1_Aktuell")

    [/autoit][autoit][/autoit][autoit]

    $z1 = $z1 + $z1_Aktuell

    [/autoit][autoit][/autoit][autoit]

    msgbox(4096, "", "Summe= " & $z1 )

    [/autoit][autoit][/autoit][autoit]

    Next

    [/autoit]

    Meine Msgbox sehen dann so aus:

    Wie man sieht, funktionieren die ersten beiden Additionen, nur bei der Dritten (13.903 + 60,00) erscheint als Ergebnis 73.903 .
    Bei anderen Programmiersprachen deklariere ich ja um vorhinein die variablen, jedoch bei autoit nicht. ich vermute das er irgendwie durcheinanderkommt.

    Wisst ihr wie ich mein code anpassen muss?

    Viele Grüße und Danke bereits im Vorraus!

    3 Mal editiert, zuletzt von WhiteF (11. März 2014 um 12:55)

  • hi,
    habe nun deine Tipps umgesetzt:

    [autoit]


    Func ...

    [/autoit][autoit][/autoit][autoit]

    dim $z1 = 0.00 ;Ist nun nicht mehr als String deklariert

    [/autoit][autoit][/autoit][autoit]

    for i = .....
    $z1_Aktuell = StringMid($line, 32, 16))

    [/autoit][autoit][/autoit][autoit]

    msgbox(4096, "", $z1 & " + " & $z1_Aktuell & @CRLF & _
    "$z1 + $z1_Aktuell")

    [/autoit][autoit][/autoit][autoit]

    $z1_Aktuell = _CheckDec($z1_Aktuell) ; In dieser Funktion wird aus einer DE Zahl (7.223,14) eine EN Zahl (7,223.14)

    [/autoit][autoit][/autoit][autoit]

    $z1 = $z1 + $z1_Aktuell

    [/autoit][autoit][/autoit][autoit]

    msgbox(4096, "", "Summe= " & $z1 )

    [/autoit][autoit][/autoit][autoit]

    Next

    [/autoit][autoit][/autoit][autoit]

    EndFunc

    [/autoit][autoit][/autoit][autoit]

    Func _CheckDec($value)
    ; Funktion zum umwandeln von DE Zahlen in EN Zahlen
    $value = StringReplace($value, ",", ",,")
    $value = StringReplace($value, ".", ",")
    $value = StringReplace($value, ",,", ".")
    ;msgbox(4096, "", "checkvalue: " & $value)
    return $value
    EndFunc

    [/autoit]

    MsgBox Output:

    Was ist den jetzt noch falsch?!

    VG

  • wie sieht denn der string in $line aus, außerdem ist

    [autoit]

    $z1_Aktuell = StringMid($line, 32, 16))

    [/autoit]

    eine ")" zuviel...(sollte das
    nicht einen error auswerfen?)

  • Wenn Du Zahlen verrechnen möchtest, solltest Du keine Strings verwenden, d. h., die Zahl darf kein "," -- wie nach dem Aufruf von _CheckDec -- enthalten; ansonsten musst Du vor und nach dem Berechnen entsprechende Ersetzungen vornehmen oder andere Funktionen verwenden bzw. schreiben (?), die das Rechnen mit Strings in einem bestimmten Format ermöglichen.

  • Stimmt, wenn du die tausender-trenner noch brauchst würde ich sie am ende hinzufügen. Habe erst letztens eine udf von BugFix dazu hier im forum gesehen.

  • Danke an alle!
    Zum schluss lag es jetzt noch am tausender Trennzeichen...

    Das eine ")" war durch abkürzung des codes falsch mitübernommen ;)

    so klappts:

    [autoit]


    Func ...

    [/autoit][autoit][/autoit][autoit]

    dim $z1 = 0.00 ;Ist nun nicht mehr als String deklariert

    [/autoit][autoit][/autoit][autoit]

    for i = .....
    $z1_Aktuell = StringMid($line, 32, 16)

    [/autoit][autoit][/autoit][autoit]

    msgbox(4096, "", $z1 & " + " & $z1_Aktuell & @CRLF & _
    "$z1 + $z1_Aktuell")

    [/autoit][autoit][/autoit][autoit]

    $z1_Aktuell = _CheckDec($z1_Aktuell) ; In dieser Funktion wird aus einer DE Zahl (7.223,14) eine EN Zahl (7,223.14)

    [/autoit][autoit][/autoit][autoit]

    $z1 = $z1 + $z1_Aktuell

    [/autoit][autoit][/autoit][autoit]

    msgbox(4096, "", "Summe= " & $z1 )

    [/autoit][autoit][/autoit][autoit]

    Next

    [/autoit][autoit][/autoit][autoit]

    EndFunc

    [/autoit][autoit][/autoit][autoit]

    Func _CheckDec($value)
    ; Funktion zum umwandeln von DE Zahlen in EN Zahlen
    $value = StringReplace($value, ",", ",,")
    $value = StringReplace($value, ".", "")
    $value = StringReplace($value, ",,", ".")
    ;msgbox(4096, "", "checkvalue: " & $value)
    return $value
    EndFunc

    [/autoit]

    Vielen Dank