"Christmas - the time to fix the computers of your loved ones" « Lord Wyrm

[PHP] 1.1 == 1.10 (aus strings werden numerische zahlen)

semteX 08.10.2005 - 14:24 1066 7
Posts

semteX

begehrt die rostschaufel
Avatar
Registered: Oct 2002
Location: Pre
Posts: 14590
tjo das problem ist eigentlich eh logisch.

2 variablen haben 2 das Datum 1.10 und 1.1 gespeichert.

bei ner abfrage a==b sagt php natürlich: true...
eh klar, er verwendet nen "numerischen" Datentyp...

ich dachte eigentlich, dass sich das problem mit

if((string)a==(string)b)

beheben lassen sollte... die bedingung geht aber weiterhin mit true durch...

wieso?

thx
Bearbeitet von semteX am 08.10.2005, 15:42

Spikx

My Little Pwny
Avatar
Registered: Jan 2002
Location: Scotland
Posts: 13504
wie siehts mit strcmp aus?

moidaschl

Vollzeit-Hackler
Avatar
Registered: Aug 2002
Location: 1210, ABK-D/L
Posts: 4029
hm komisch.

du könntest a und b exploden und dann vergleichen (als workaround)

semteX

begehrt die rostschaufel
Avatar
Registered: Oct 2002
Location: Pre
Posts: 14590
workarounds gibts genug das ist kein problem (datum aufsplitten und montag / tag einzeln vergleichen,...)

mich hätt nur interessiert wieso es eben ned geht wenn ich den datentyp explizit als string festleg...

add: binär vergleichen mittels strcmp ist natürlich nochmal gschickter als mit if...

add2: ein kleines testscript, dass das problem veranschaulicht. ergebniss ist in dem fall immer "gleich"

Code: PHP
<?php
$a="1.10";
$b="1.1";
if((string)($a)==(string)($b)) {
  echo "gleich";
} else {
  echo "ungleich";
}
?>
Bearbeitet von semteX am 08.10.2005, 14:43

Spikx

My Little Pwny
Avatar
Registered: Jan 2002
Location: Scotland
Posts: 13504
Ich schätze der == Operator vergleicht bei Strings, die nur Zahlen enthalten, eben nach ihrem numerischen Wert und ansonsten binär.

gue

Addicted
Avatar
Registered: Feb 2003
Location: Linz
Posts: 400
Zitat von Spikx
Ich schätze der == Operator vergleicht bei Strings, die nur Zahlen enthalten, eben nach ihrem numerischen Wert und ansonsten binär.
Ja. Siehe http://www.php.net/manual/en/langua....comparison.php
Lösung: === Operator (oder strcmp) verwenden.

semteX

begehrt die rostschaufel
Avatar
Registered: Oct 2002
Location: Pre
Posts: 14590
thx :)

dio

Here to stay
Registered: Nov 2002
Location: Graz
Posts: 4868
Das casten funktioniert anscheinend nicht so ganz bzw. anders als bei anderen Programmiersprachen :confused:? Vielleicht hat ja wer die Einsicht und kann mich erleuchten ;).

Auf jeden Fall kannst du das ganze dennoch erreichen, indem du auch auf Typgleichheit (sprich $a===$b) prüfst.

edit: owned by Telefon :(
Kontakt | Unser Forum | Über overclockers.at | Impressum | Datenschutz