2012-07-15 13 views
5

का उपयोग करके मैंने स्ट्रिंग्स के साथ '==' का उपयोग करके कुछ परीक्षण किए। मुझे स्ट्रिंग की तुलना करना पता है '==' रास्ता नहीं है, लेकिन एक अजीब व्यवहार है जिसे मैं हल करना चाहता हूं।PHP स्ट्रिंग तुलना '=='

मैं इस पृष्ठ में PHP दस्तावेज़ का पालन कर रहा हूं: http://www.php.net/manual/en/language.operators.comparison.php। यह परीक्षण मैं

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

किया है प्रलेखन कहते हैं जब हम संख्या के साथ तार की तुलना, पीएचपी पहले नंबर पर स्ट्रिंग बदल देता है, लेकिन जब मैं नंबरों के लिए '100' और '1e2' कन्वर्ट वे बराबर नहीं हैं। तुलना बूलियन झूठी आउटपुट चाहिए।

यह अजीब व्यवहार क्यों है? धन्यवाद!

+0

संयोग से यही कारण है कि '===' के बजाय '===' का उपयोग करना सबसे अच्छा होता है, क्योंकि परिणाम अधिक अनुमानित है! –

उत्तर

6

सभी संख्याएं पूर्णांक नहीं हैं। 1e2 एक फ्लोट है (जो एक पूर्णांक के रूप में प्रतिनिधित्व करने योग्य होता है, लेकिन सीधे एक पूर्णांक में परिवर्तनीय नहीं है)। int रों बजाय float रों में कनवर्ट करने का प्रयास करें:

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

इस पर विस्तार करने के लिए, यहां दस्तावेज़ों में स्पष्टीकरण दिया गया है। http://www.php.net/manual/en/language.types.string.php#language.types.string.conversion "यदि स्ट्रिंग में वर्णों में से कोई भी नहीं है। ',' e ', या' ई 'और संख्यात्मक मान पूर्णांक प्रकार सीमाओं में फिट बैठता है (जैसा कि PHP_INT_MAX द्वारा परिभाषित किया गया है), स्ट्रिंग का पूर्णांक के रूप में मूल्यांकन किया जाएगा। अन्य सभी मामलों में इसका मूल्यांकन एक फ्लोट के रूप में किया जाएगा। " –

1

Type JugglingType Casting

के बराबर प्रकार करतब दिखाने पेज

से या तो संकार्य, एक नाव है तो दोनों ऑपरेंड मूल्यांकन किया जाता है नहीं है तैरने के रूप में, और परिणाम एक फ्लोट होगा। अन्यथा, ऑपरेटरों को पूर्णांक के रूप में व्याख्या किया जाएगा, और परिणाम भी एक पूर्णांक होगा।

संबंधित मुद्दे