Gleich und doch nicht gleich

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.
 
Jo...bei mir gehts ja auch(ohne die & :-))...wie gesagt, selbst die Prüfsumme stimmt.


So funktioniert sogar der Vergleich:
Code:
echo(md5($summeSoll)==md5($summeHaben))?1:-1;
....ich bin sehr verwirrt.
 
Ich habs jetzt folgendermaßen angepasst:

PHP:
// 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!
 
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 :confused:
 
Das kann nur ein Bug sein... Denn Typen UND Wert sind (bei mir) laut [phpf]var_dump[/phpf] 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:
$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.
 
Zuletzt bearbeitet:
Mit welchen PHP-Versionen arbeitet Ihr denn so?
Ich hab grad mal mit PHP 5.1.4 und 4.4.2 mit folgendem Code getestet und das Fragezeichen wurde nicht ausgegeben, die Pruefung ist also wie erwartet verlaufen.
PHP:
<?php
$a=59.99;
$b=59.99;
$a5=md5($a);
$b5=md5($b);
if ($a5!=$b5)
{
 echo '?';
}
?>
 
Das funktioniert bei mir auch. Aber benutz mal den gegebenen Code, du wirst staunen ;) Ich arbeite mit PHP 5.1.1
PHP:
<?php
$soll = array('Forderungen'=> 59.97, 'a' => 0.02);
$haben = array('USt' => 59.98, 'a' => 0.01);

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

echo "Summe Soll: $summeSoll\n";
echo "Summe Haben: $summeHaben\n";
    
echo "<br>";
var_dump($summeSoll === $summeHaben);

if ($summeSoll != $summeHaben)
{
    echo 'Ungleich';            // Beträge Soll/Haben stimmen nicht überein
} 
?>
 
Bei mir ists 4.3.1
aber das ist nicht die Frage..bei deinem Code gehts bei mir auch, aber nimm mal diesen:
PHP:
<?php
$soll=array
(
'Forderungen' => '59.99'
);

$haben=
array
(
'USt' => '8.27',
'WVK_Kost' => '0.00',
'WVK_Kost' => '51.72',

);


$summeSoll = 0;
foreach ($soll as $konto => $betrag)
{

    $betrag = number_format($betrag, 2, '.', '');
    $summeSoll += $betrag;
}
    
$summeHaben = 0;
foreach ($haben as $konto => $betrag)
{
    
    $betrag = number_format($betrag, 2, '.', '');
    $summeHaben += $betrag;
}
echo $summeSoll.'-'. md5($summeSoll).'<br>';
echo $summeHaben.'-'. md5($summeHaben).'<br>';

echo($summeSoll==$summeHaben)?'gleich':'nicht gleich';

?>
nix geht.
und wenn du jetzt mal die Werte etwas änderst, bspw.
PHP:
$haben=
array
(
'USt' => '8.29',
'WVK_Kost' => '0.00',
'WVK_Kost' => '51.70',
);
..dann gehts auf einmal.
War da nicht irgendwas mit Oktalzahlen, mit denen PHP intern arbeitet...in JS gibts da doch auch merkwürdige Sachen, und die hängen damit zusammen.
 
Das geht aber auch nur wirklich mit dem
PHP:
$haben=
array
(
'USt' => '8.29',
'WVK_Kost' => '0.00',
'WVK_Kost' => '51.70',
);

Mach ich
PHP:
$haben=
array
(
'USt' => '8.19',
'WVK_Kost' => '0.00',
'WVK_Kost' => '51.80',
);
Ist es ungleich... Und mein Code bringt bei dir das erwartete Ergebnis?
 
Hmm, komisch.

Mal ein paar (abwegige) Theorien:
  • Quantenfluktuation
  • Gleitkomma-Fehler in modernen Prozessoren (man erinnere sich an den P1)
  • hoehere Gewalt
 
Zurück