2012-07-15 14 views
5

Ich habe ein paar Tests mit Strings mit '=='. Ich weiß, String '==' zu vergleichen ist nicht der Weg, aber es ist ein seltsames Verhalten, das ich lösen will.PHP-String-Vergleich mit '=='

ich im Anschluss an die PHP-Dokumentation auf dieser Seite: http://www.php.net/manual/en/language.operators.comparison.php. Dies ist der Test, den ich

<?php 
    var_dump("100" == "1e2"); //outputs boolean true 
    var_dump((int) "100"); //int 100 
    var_dump((int) "1e2"); //int 1 
?> 

Die Dokumentation hat, sagt, wenn wir Strings mit Zahlen vergleichen, PHP zunächst die Zeichenfolge Zahlen konvertiert, aber wenn ich ‚100‘ und ‚1E2‘ zu Zahlen konvertieren sie nicht gleich sind. Der Vergleich sollte boolean false ausgeben.

Warum ist dieses seltsame Verhalten? Vielen Dank!

+0

Übrigens ist es deshalb am besten, '===' anstelle von '==' zu verwenden, da das Ergebnis viel vorhersehbarer ist! –

Antwort

6

Nicht alle Zahlen sind Ganzzahlen. 1e2 ist ein Gleitkomma (das zufällig als Ganzzahl darstellbar ist, aber nicht direkt in eine Ganzzahl umwandelbar ist). Versuchen Sie, float s Umwandlung statt int s:

<?php 
    var_dump("100" == "1e2"); // bool(true) 
    var_dump((float) "100"); // float(100) 
    var_dump((float) "1e2"); // float(100) 
?> 
+1

Um dies zu erweitern, hier ist die Erklärung in der Dokumentation. http://www.php.net/manual/en/language.types.string.php#language.types.string.conversion "Wenn die Zeichenfolge keine der Zeichen '.', 'e' oder '' enthält E 'und der numerische Wert passt in integer type limits (wie von PHP_INT_MAX definiert), der String wird als Integer ausgewertet. In allen anderen Fällen wird er als Float ausgewertet. " –

1

Type Juggling nicht gleich Type Casting

Vom Typ Jonglier Seite

Wenn einer der Operanden ein Schwimmer ist, dann beide Operanden ausgewertet werden als schwebt, und das Ergebnis wird ein Float sein. Andernfalls werden die Operanden als Ganzzahlen interpretiert, und das Ergebnis wird ebenfalls eine ganze Zahl sein.