Gleich und doch nicht gleich

@mAu nö...dein Code bringt bei mir nicht das erwartete Ergebnis:
Code:
Summe Soll: 59.99 Summe Haben: 59.99
bool(false) Ungleich

Noch eine weitere Theorie:
der grosse Ignorator in seiner unendlichen Allmacht die Gesetze der Logik ausser Kraft gesetzt :-)

Ich werd das Gefühl nicht los, dass wir diese Problematik schon mal erörtert haben...
 
Mir faellt da grad mal was auf:
Koennte es evtl. daran liegen, dass in dem Array 2 Indizes mit dem gleichen Namen existieren (WVK_Kost)?
 
Nach meinen Test, bin ich zu dem Entschluss gekommen, dass es definitiv an dem Punkt liegt. Die Variable also vom Type float ist. Nach weiteren Test, bin ich dann dazu gekommen, dass es kein "richtiges" float ist. Wendet man nun ein doppeltes Type-Casting an, funktioniert es.
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 ".md5($summeSoll)."<br>";
echo "Summe Haben: $summeHaben ".md5($summeHaben)."<br>";
echo "<hr>";
var_dump($summeSoll === $summeHaben);echo "<br>";
var_dump($summeSoll);echo "<br>";
var_dump($summeHaben);echo "<br>";

echo "<hr>";
$summeSoll = (float)(String)$summeSoll;
$summeHaben = (float)(String)$summeHaben;

var_dump($summeSoll === $summeHaben);echo "<br>";
var_dump($summeSoll);echo "<br>";
var_dump($summeHaben);echo "<hr>";

if ($summeSoll != $summeHaben)
{
    echo 'Ungleich';            // Beträge Soll/Haben stimmen nicht überein
}
?>
 
Zuletzt bearbeitet:
Nein. Eigentlich nicht. Wenn man vor der Prüfung hingeht und die Werte (in einem unterschiedlichen type) von Hand zuweist, funktioniert es auch.
PHP:
$summeSoll = 59.55;
$summeHaben = "59.55";

var_dump($summeSoll === $summeHaben);echo "<br>";
var_dump($summeSoll);echo "<br>";
var_dump($summeHaben);echo "<br>";

Und wenn es ein Bug wäre, dann würde er aber schon recht lange bestehen. Bei meinem zweit Testserver mit PHP 4.3.2 RC1 klappt es nämlich auch nicht.
 
Zuletzt bearbeitet:
Es kann doch nur ein Bug sein... Ich mein, wenn 1.)Hashwerte identisch, 2.)var_dump identischen Typ und Wet angibt, 3.)es mit "gleichen" Arrays klappt...
 
Hallöle,

was mich verwundert ist das dieser Code:
PHP:
echo var_dump($summeHaben).'<br>';
echo gettype($summeHaben);

das ausgibt:
Code:
float(59.99)
double

Gibts dafür ein Grund?
 
Zuletzt bearbeitet:
Mahlzeit,

mir ist dieser Thread gerade wieder eingefallen und ich wollte Fragen:
Ist es nun ein Bug?

Gruss,
MArc
 
Zurück