Jörg: Warum wird die falsche Endsumme ausgegeben?

Beitrag lesen

Versuche ich mal, so umzusetzen und meld mich dann wieder zurück.

function myArrayZwischensumme($operation,$Art,$betrag,$page)
{
    logge('Seite'.$page.'/ Operation: '.$operation.'/ Art: '.$Art.'/ Betrag='.$betrag,'__test.txt');

    $ergebnis = 0;
    static $arrPage = [];

    if($operation == 'add' || $operation == 'sub') {
        if($operation == 'sub') {
            $betrag = $betrag * (-1);
        }
        $arrPage[$page] = $arrPage[$page] + $betrag;
        logge('Ergebnis Seite '.$page.' :'.$arrPage[$page],'__test.txt');
        return;
    }

    if($operation == 'get') {
        logge('Get Seite '.$page.' :'.$arrPage[$page],'__test.txt');
        for($i = 1;$i <= $page;$i++) {
            $ergebnis = $ergebnis + $arrPage[$i];
        }
        logge('return Seite '.$page.' = '.$ergebnis,'__test.txt');
        return number_format($ergebnis,2,".","");
    }
}
23.11.2022 13:11:37.909100: Seite/ Operation: add/ Art: F/ Betrag=0
23.11.2022 13:11:37.919100: Ergebnis Seite  :0
23.11.2022 13:11:37.928000: Seite/ Operation: add/ Art: A/ Betrag=0
23.11.2022 13:11:37.936500: Ergebnis Seite  :0
23.11.2022 13:11:37.974000: Seite1/ Operation: add/ Art: T/ Betrag=3545
23.11.2022 13:11:37.982000: Ergebnis Seite 1 :3545
23.11.2022 13:11:37.990100: Seite1/ Operation: add/ Art: T/ Betrag=0
23.11.2022 13:11:37.998400: Ergebnis Seite 1 :3545
23.11.2022 13:11:38.006700: Seite1/ Operation: add/ Art: T/ Betrag=3455
23.11.2022 13:11:38.014900: Ergebnis Seite 1 :7000
23.11.2022 13:11:38.023800: Seite1/ Operation: get/ Art: Zwischensumme/ Betrag=0
23.11.2022 13:11:38.031900: Get Seite 1 :7000
23.11.2022 13:11:38.039900: return Seite 1 = 7000
23.11.2022 13:11:38.084700: Seite2/ Operation: sub/ Art: RGA-Zusatz/ Betrag=7000
23.11.2022 13:11:38.092500: Ergebnis Seite 2 :-7000
23.11.2022 13:11:38.146100: Endergebnis anfordern
23.11.2022 13:11:38.153400: Seite2/ Operation: get/ Art: Endsumme/ Betrag=0
23.11.2022 13:11:38.161800: Get Seite 2 :-7000
23.11.2022 13:11:38.170400: return Seite 2 = 0

Im Ausdruck passen die Werte nun, aber in den Logdaten sind ja immer noch falsche Werte drin. Wie Andreas weiter oben schon bemerkt hatte, werden mit den falschen beträgen (2 x 3545) die richtigen ergebnisse erzielt.)

Meine Vermutung außerdem:

$ergebnis = 0 ist nicht korrekt.

Jörg