ERLEDIGT
NEIN
NEIN
ANTWORTEN
29
29
ZUGRIFFE
821
821
EMPFEHLEN
-
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-Code:<?php
$a=59.99;
$b=59.99;
$a5=md5($a);
$b5=md5($b);
if ($a5!=$b5)
{
echo '?';
}
?>PHP Class Collection - PHP-Klassen fuer PHP 5 (und Teilweise auch fuer PHP 4)
Updates: Catcher 1.1, FTPConnection 1.2, MultiSQL 1.1, RSS2 1.1, SMTPConnection 1.4
__________________
EasyLFS - Hintergrundinformationen, Installationsanleitung, Softwareliste und Download
EasyLFS Projektthread - Informationen, Status und Diskussion zu meiner Linux-Distribution
__________________
__________________Ich bin die Schildkroete, mein Sohn. Ich habe das Universum erschaffen, aber bitte mach mir daraus keinen Vorwurf; ich hatte Bauchschmerzen.
Zitat von Friedrich Nietzsche
-
16.06.06 03:41 #17
Das funktioniert bei mir auch. Aber benutz mal den gegebenen Code, du wirst staunen
Ich arbeite mit PHP 5.1.1
PHP-Code:<?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
}
?>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!
-
Bei mir ists 4.3.1
aber das ist nicht die Frage..bei deinem Code gehts bei mir auch, aber nimm mal diesen:
nix geht.PHP-Code:<?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';
?>
und wenn du jetzt mal die Werte etwas änderst, bspw.
..dann gehts auf einmal.PHP-Code:$haben=
array
(
'USt' => '8.29',
'WVK_Kost' => '0.00',
'WVK_Kost' => '51.70',
);
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.
-
16.06.06 04:01 #19
Das geht aber auch nur wirklich mit dem
Mach ichPHP-Code:$haben=
array
(
'USt' => '8.29',
'WVK_Kost' => '0.00',
'WVK_Kost' => '51.70',
);
Ist es ungleich... Und mein Code bringt bei dir das erwartete Ergebnis?PHP-Code:$haben=
array
(
'USt' => '8.19',
'WVK_Kost' => '0.00',
'WVK_Kost' => '51.80',
);
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!
-
Hmm, komisch.
Mal ein paar (abwegige) Theorien:- Quantenfluktuation
- Gleitkomma-Fehler in modernen Prozessoren (man erinnere sich an den P1)
- hoehere Gewalt
PHP Class Collection - PHP-Klassen fuer PHP 5 (und Teilweise auch fuer PHP 4)
Updates: Catcher 1.1, FTPConnection 1.2, MultiSQL 1.1, RSS2 1.1, SMTPConnection 1.4
__________________
EasyLFS - Hintergrundinformationen, Installationsanleitung, Softwareliste und Download
EasyLFS Projektthread - Informationen, Status und Diskussion zu meiner Linux-Distribution
__________________
__________________Ich bin die Schildkroete, mein Sohn. Ich habe das Universum erschaffen, aber bitte mach mir daraus keinen Vorwurf; ich hatte Bauchschmerzen.
Zitat von Friedrich Nietzsche
-
@mAu nö...dein Code bringt bei mir nicht das erwartete Ergebnis:
Code :1 2
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)?PHP Class Collection - PHP-Klassen fuer PHP 5 (und Teilweise auch fuer PHP 4)
Updates: Catcher 1.1, FTPConnection 1.2, MultiSQL 1.1, RSS2 1.1, SMTPConnection 1.4
__________________
EasyLFS - Hintergrundinformationen, Installationsanleitung, Softwareliste und Download
EasyLFS Projektthread - Informationen, Status und Diskussion zu meiner Linux-Distribution
__________________
__________________Ich bin die Schildkroete, mein Sohn. Ich habe das Universum erschaffen, aber bitte mach mir daraus keinen Vorwurf; ich hatte Bauchschmerzen.
Zitat von Friedrich Nietzsche
-
Jo...war doch kein Rechenfehler
habs eben auch bemerkt und editiert.
Der Logikfehler besteht aber weiterhin.
-
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-Code:<?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
}
?>Geändert von fanste (16.06.06 um 14:08 Uhr)
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.
-
Ja schon, aber bei ($summeSoll != $summeHaben) wird der Typ doch garnicht berücksichtigt....normalerweise
-
Nein. Eigentlich nicht. Wenn man vor der Prüfung hingeht und die Werte (in einem unterschiedlichen type) von Hand zuweist, funktioniert es auch.
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.PHP-Code:$summeSoll = 59.55;
$summeHaben = "59.55";
var_dump($summeSoll === $summeHaben);echo "<br>";
var_dump($summeSoll);echo "<br>";
var_dump($summeHaben);echo "<br>";
Geändert von fanste (16.06.06 um 14:24 Uhr)
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.
-
16.06.06 16:01 #27
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...
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!
-
Hallöle,
was mich verwundert ist das dieser Code:
das ausgibt:PHP-Code:echo var_dump($summeHaben).'<br>';
echo gettype($summeHaben);
Code :1 2
float(59.99) double
Gibts dafür ein Grund?Geändert von MArc (16.06.06 um 16:42 Uhr)
Kryn.cms - einfach anders.
"When you're talking about webserver, as it is, with no rules, well then, baby you'd better block every tiny hole of your server!" - MArc (inspired by Bruce L.)
-
Der Grund wird sein, dass die Variable den Gleitkommazahlwert „59.99“ besitzt.
Markus Wulftange
-
Mahlzeit,
mir ist dieser Thread gerade wieder eingefallen und ich wollte Fragen:
Ist es nun ein Bug?
Gruss,
MArcKryn.cms - einfach anders.
"When you're talking about webserver, as it is, with no rules, well then, baby you'd better block every tiny hole of your server!" - MArc (inspired by Bruce L.)
Ähnliche Themen
-
<ul> ist nicht gleich <ul>
Von crunch im Forum Javascript & AjaxAntworten: 3Letzter Beitrag: 28.12.10, 17:05 -
Java2D oder doch gleich Java3D
Von PeterStaab im Forum Swing, Java2D/3D, SWT, JFaceAntworten: 0Letzter Beitrag: 15.12.07, 14:22 -
KUbuntu oder doch besser gleich Debian ?
Von Liro im Forum Linux & UnixAntworten: 11Letzter Beitrag: 03.07.07, 21:11 -
grösser gleich bzw. kleiner gleich
Von saila im Forum PHPAntworten: 5Letzter Beitrag: 11.09.06, 13:47 -
größer gleich oder kleiner gleich
Von saila im Forum Relationale DatenbanksystemeAntworten: 0Letzter Beitrag: 10.09.06, 23:35





Zitieren
Login






[PHP][Snippet] Array zu XML konvertieren