tutorials.de Buch-Aktion 02/2012
Seite 1 von 2 12 LetzteLetzte
ERLEDIGT
NEIN
ANTWORTEN
29
ZUGRIFFE
765
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    miheberle miheberle ist offline Rookie
    Registriert seit
    Jun 2006
    Beiträge
    6
    Hallo,

    ich habe auf einmal ein ganz eigenartiges Problem:

    In einer Funktion vergleiche ich zwei Werte wie folgt:

    PHP-Code:
    echo "Summe Soll: $summeSoll\n";
    echo 
    "Summe Haben: $summeHaben\n";
        
    if (
    $summeSoll != $summeHaben)
    {
        return -
    1;            // Beträge Soll/Haben stimmen nicht überein

    Eigentlich nichts Weltbewegendes - dachte ich. Denn obwohl die Variableninhalte gleich sind, wird -1 zurückgegeben. An was kann das liegen?

    Vielen Dank!

    Michael
     

  2. #2
    Registriert seit
    Mar 2005
    Ort
    Bühl/Baden
    Beiträge
    2.330
    Sicher, dass sie genau gleich sind? Zeig doch mal die Deklaration der Variablen.
     
    Gruß fanste

    Benutze bitte immer die passende Highlight-Tags.(z.B: für PHP [php] [/php] Allgemein: [highlight=SCRIPTSPRACHE]Code[/highlight] )

    Problem gelöst? Dann markiere das Thema bitte als erledigt!
    Beachte bitte die Netiquette. Insbesondere Punkt 15.

  3. #3
    Registriert seit
    Dec 2002
    Ort
    Trier
    Beiträge
    17.502
    Blog-Einträge
    10
    Was sagt denn die Identitätsprüfung:
    PHP-Code:
    var_dump$summeSoll === $summeHaben ); 
     
    Markus Wulftange

  4. #4
    Registriert seit
    Mar 2002
    Ort
    Stuttgart (Baden-Württemberg)
    Beiträge
    984
    Blog-Einträge
    7
    Zitat Zitat von Gumbo
    Was sagt denn die Identitätsprüfung:
    PHP-Code:
    var_dump$summeSoll === $summeHaben ); 
    Er prüft doch mit != und nicht !==, also ist der Variablentyp doch schnuppe, oder seh ich das falsch?
     
    Gruß mAu


    ──────────────────────────
    Ich auf flickr

    * Unformatierten Quellcode schaue ich mir _nicht_ an!
    * Sollte ich euch bei einer Frage weitergeholfen haben, würde ich mich über eine positive Bewertung freuen.
    * Bitte die Netiquette beachten.
    * Vergesst nicht, beantwortete Fragen als erledigt zu markieren!


  5. #5
    miheberle miheberle ist offline Rookie
    Registriert seit
    Jun 2006
    Beiträge
    6
    var_dump gibt als Ergebnis "bool(false)" zurück.

    Die Variablen wurden folgendemaßen deklariert bzw. befüllt:

    PHP-Code:
    $summeSoll 0;
    foreach (
    $soll as $konto => & $betrag)
    {
        
    $betrag str_replace(',''.'$betrag);
        
    $betrag number_format($betrag2'.''');
        
    $summeSoll += $betrag;
    }
        
    $summeHaben 0;
    foreach (
    $haben as $konto => & $betrag)
    {
        
    $betrag str_replace(',''.'$betrag);
        
    $betrag number_format($betrag2'.''');
        
    $summeHaben += $betrag;

    Ich habe auch schon den Typ überprüft, obwohl dies bei != eigentlich keine Rolle spielen dürfte: beidesmal double.
     

  6. #6
    Registriert seit
    Dec 2002
    Ort
    Trier
    Beiträge
    17.502
    Blog-Einträge
    10
    Wie sehen denn typische Ausgangswerte dafür aus?
     
    Markus Wulftange

  7. #7
    miheberle miheberle ist offline Rookie
    Registriert seit
    Jun 2006
    Beiträge
    6
    $soll:
    Array
    (
    [Forderungen] => 59.99
    )

    $haben:
    Array
    (
    [USt] => 8.27
    [WVK_Kost] => 0.00
    [WVK] => 51.72
    )

    $summeSoll und $summeHaben sind also beide 59.99, was durch die echos vor der if-Abfrage bestätigt wird.
     

  8. #8
    Avatar von Sven Mintel
    Sven Mintel Sven Mintel ist offline Mitglied
    Registriert seit
    Aug 2003
    Beiträge
    18.238
    Blog-Einträge
    6

    also die crc32-Summe stimmt überein...merkwürdig.

    Wozu ist eigentlich das & da?
    Code :
    1
    
    [B]&[/B] $betrag
     

  9. #9
    miheberle miheberle ist offline Rookie
    Registriert seit
    Jun 2006
    Beiträge
    6
    Wozu ist eigentlich das & da?
    Mit dem & bekomme ich eine Referenz auf die jeweilige Variable. Somit werden die Veränderungen, die in der Schleife an der Variable $betrag vorgenommen werden, direkt auf der Variablen durchgeführt.
     

  10. #10
    Avatar von Sven Mintel
    Sven Mintel Sven Mintel ist offline Mitglied
    Registriert seit
    Aug 2003
    Beiträge
    18.238
    Blog-Einträge
    6
    Bist du sicher..ich bekomme mit dem & einen Parse-Error

    Aber das mit dem Vergleich ist schon sehr merkwürdig
     

  11. #11
    miheberle miheberle ist offline Rookie
    Registriert seit
    Jun 2006
    Beiträge
    6
    Also bei mir gehts. Funktioniert auch alles wunderbar: die Summen werden werden korrekt berechnet. Nur der Vergleich funktioniert nicht. Ich habe auch schon die Summen-Variablen im if-Bereich ausgeben lassen (direkt vor dem return), sie sind absolut identisch.
     

  12. #12
    Avatar von Sven Mintel
    Sven Mintel Sven Mintel ist offline Mitglied
    Registriert seit
    Aug 2003
    Beiträge
    18.238
    Blog-Einträge
    6
    Jo...bei mir gehts ja auch(ohne die & )...wie gesagt, selbst die Prüfsumme stimmt.


    So funktioniert sogar der Vergleich:
    Code :
    1
    
    echo(md5($summeSoll)==md5($summeHaben))?1:-1;
    ....ich bin sehr verwirrt.
     

  13. #13
    miheberle miheberle ist offline Rookie
    Registriert seit
    Jun 2006
    Beiträge
    6
    Ich habs jetzt folgendermaßen angepasst:

    PHP-Code:
    // if ($summeSoll != $summeHaben)
    if (md5($summeSoll) != md5($summeHaben))
    {
        
    // echo "*$summeSoll*$summeHaben*";
        
    return -1;            // Beträge Soll/Haben stimmen nicht überein

    So gehts jetzt wenigstens fürs Erste...

    Wurde bei dir der Vergleich (ohne md5) korrekt durchgeführt? Oder auch nur mit md6?

    Vielen Dank für die Hilfe!
     

  14. #14
    Avatar von Sven Mintel
    Sven Mintel Sven Mintel ist offline Mitglied
    Registriert seit
    Aug 2003
    Beiträge
    18.238
    Blog-Einträge
    6
    Nö...bei mir wars das gleiche wie bei dir, total unverständlich für mich, wenn der Hash identisch ist, dann sollte es der Wert erst recht sein.

    Entweder das ist ein Bug, oder ein ganz banaler Denkfehler
     

  15. #15
    Registriert seit
    Mar 2002
    Ort
    Stuttgart (Baden-Württemberg)
    Beiträge
    984
    Blog-Einträge
    7
    Das kann nur ein Bug sein... Denn Typen UND Wert sind (bei mir) laut var_dump() gleich. Und die Abfrage liefert auch bei mir ein false... Also kann es nur ein Bug sein.

    Nachtrag
    Folgendes gibt jedoch bei mir bool(true):
    PHP-Code:
    $soll = array('Forderungen'=> 59.98'Bloub' => 0.01);
    $haben = array('USt' => 59.98'Bloub' => 0.01);

    # Und das auch

    $soll = array('Forderungen'=> 59.99);
    $haben = array('USt' => 59.99);

    # Folgendes jedoch NICHT
    $soll = array('Forderungen'=> 59.97'a' => 0.02);
    $haben = array('USt' => 59.98'a' => 0.01); 
    Also liegt es daran, ob die Arrays gleich sind oder nicht.
    Geändert von mAu (16.06.06 um 03:26 Uhr)
     
    Gruß mAu


    ──────────────────────────
    Ich auf flickr

    * Unformatierten Quellcode schaue ich mir _nicht_ an!
    * Sollte ich euch bei einer Frage weitergeholfen haben, würde ich mich über eine positive Bewertung freuen.
    * Bitte die Netiquette beachten.
    * Vergesst nicht, beantwortete Fragen als erledigt zu markieren!


Ähnliche Themen

  1. <ul> ist nicht gleich <ul>
    Von crunch im Forum Javascript & Ajax
    Antworten: 3
    Letzter Beitrag: 28.12.10, 17:05
  2. Java2D oder doch gleich Java3D
    Von PeterStaab im Forum Swing, Java2D/3D, SWT, JFace
    Antworten: 0
    Letzter Beitrag: 15.12.07, 14:22
  3. KUbuntu oder doch besser gleich Debian ?
    Von Liro im Forum Linux & Unix
    Antworten: 11
    Letzter Beitrag: 03.07.07, 21:11
  4. grösser gleich bzw. kleiner gleich
    Von saila im Forum PHP
    Antworten: 5
    Letzter Beitrag: 11.09.06, 13:47
  5. größer gleich oder kleiner gleich
    Von saila im Forum Relationale Datenbanksysteme
    Antworten: 0
    Letzter Beitrag: 10.09.06, 23:35