Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] Problem mit 0,5 beim Rechnen

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • [Erledigt] Problem mit 0,5 beim Rechnen

    Hi Leute,

    ich verzweifel bald! Ich baue gerade an einem Script in dem ich von zwei Jahren Fortbildungsstunden ändern und ansehen will. Das erste Jahr ist immer das vergangene Jahr, da man die Stunden immer im Vorraus leisten muss. In unserem Fall Stunden für 2008 die 2007 geleistet wurden. Das zweite Jahr ist dann logischer Weise 2009. Wenn in 2007 nicht genügen Stunden geleistet wurden, können diese nachträglich in 2008 nachgeholt werden. Heißt wenn ich Jahr 2008 den Wert 29 Stunden habe und 2 Stunden zubuche wird 2008 auf 30 und 2009 auf 1 gesetzt. Dies nur zum Verständnis was gemacht werden soll.

    Das Problem besteht nun dadrin, das ich auch halbe Stunden buchen muss. Die Eingabe findet durch ein Formular statt. Somit kann der benutzer anstatt dem geforderten "." auch ein "," zwischen die Dezimalzahlen setzten. Die Lösung dafür habe ich soweit auch bereits gefunden. Dies klappt aber nur mit Zahlen über 1, also +/-1,5 etc. Bei 0,5 passiert bei meinem Script garnichts!

    Code:
    //Daten aus Formular
    $change[Test]=0,5;
    
    //Daten aus MySQL Datenbank
    $a->User="Test";
    $a->actyear="5";
    $a->nextyear="0";
    
    //Rechnung
          if($change[$a->User]!="")
            {
            $g=ereg_replace(",",".",$change[$a->User]);
            $h=$a->actyear; //Eintrag Jahr 2008
            $i=$a->nextyear; //Eintrag Jahr 2009
            echo "$a->User g=$g, h=$h, i=$i<br>"; //Zur Kontrolle ob gerechnet wurde
            if($change[$a->User]>0.00)
              {
              if($h<30){if($h+$g>30){ $j=$h+$g-30.00;$i=$j;$h=30.00;}else{$h=$h+$g;}}else{$i=$i+$g;}
              }
            if($change[$a->User]<0.00)
              {
              $r=$i - abs($g);
              if(($i>0.00&&$i-abs($g)<0.00)||$i<=0.00){$j=abs($i-abs($g));$i=0.00;if($h-$j<0){$h=0;}else{$h=$h-$j;}}else{$i=$i-abs($g);}
              }
            echo "$a->User g=$g, h=$h, i=$i<br>"; //Zur Kontrolle ob gerechnet wurde
            }
    Bei diesem Beispiel sollte ja 5,5 als Ergebnis herauskommen. Wenn ich anstatt dem "," den "." setzte läuft das Script! Hat jemand eine Idee wie ich auch bei der Eingabe 0,5 ein Ergebnis bekomme?


  • #2
    Hallo,

    warum machst du das nicht so?
    PHP-Code:
    $zahl '0,5';
    $zahl str_replace(',''.'$zahl);
    $zahl = (float)$zahl
    (float) ist nicht unbedingt notwendig, da PHP beim Rechnen mit diesem Wert eh ein implizites Typecasting durchführt, aber sicher ist sicher und somit ist auch klar, von welchem Typ die Zahl sein soll.
    Es ist übrigens überflüssig, bei solch simplen Sachen, RegEx-Funktionen zu benutzen. Abgesehen davon, dass ereg_* eh etwas veraltet ist.
    Refining Linux: “Performing Push Backups – Part 1: rdiff-backup

    Kommentar


    • #3
      Mittels str_replace
      PHP: str_replace - Manual

      ...zu langsam

      Kommentar


      • #4
        Habe meinen Fehler gefunden! Man sollte auch den bearbeiteten String auf <0.00 prüfen! Jetzt läufst!

        Kommentar

        Lädt...
        X