दिलचस्प पोस्ट
चरित्र के बाद स्ट्रेट प्राप्त करें एसक्यूएल: क्वेरी के द्वारा डिफ़ॉल्ट ऑर्डर क्या है? बंडलर: क्या होता है: की आवश्यकता => एक जेफफ़ाइल में गलत है? एनिमेशन के बिना स्विचन गतिविधियों मैं एक फ़ाइल की सामग्री से एक जावा स्ट्रिंग कैसे बनाऊं? त्रुटि: कार्य निष्पादन के लिए विफल ': app: dexDebug' com.android.ide.common.process.ProcessException डेटा फ्रेम में समूह द्वारा अद्वितीय / विशिष्ट मानों की गिनती जावा में किसी भी तारीख को पार्स करें HTML ईमेल कैसे भेजें मैं इकाई फ़्रेमवर्क के साथ सॉफ्ट हटाए गए संस्थाओं को कैसे स्वचालित रूप से फिल्टर कर सकता हूं? स्ट्रिंग के सभी संभावित क्रमपरिवर्तनों की सूची उत्पन्न करें ऑब्जेक्ट की विशेषता के आधार पर ऑब्जेक्ट की एक सूची को कैसे सॉर्ट करना है? क्या मानक स्टूडियो को मानक जावा प्रोजेक्ट्स चलाने के लिए इस्तेमाल किया जा सकता है? एक Django प्रपत्र में, मैं एक फ़ील्ड को केवल पढ़ने के लिए (या अक्षम) कैसे कर सकता हूं ताकि इसे संपादित नहीं किया जा सके? यह जावास्क्रिप्ट / JQuery सिंटैक्स काम कैसे करता है: (फ़ंक्शन (विंडो, अपरिभाषित) {}) (विंडो)?

स्ट्रिंग को पूर्णांक की तुलना अजीब परिणाम देता है

मैं वास्तव में क्यों यह ऑपरेशन काम करता है के रूप में उलझन में हूँ क्या कोई इसे समझा सकता है?

$test1 = "d85d1d81b25614a3504a3d5601a9cb2e"; $test2 = "3581169b064f71be1630b321d3ca318f"; if ($test1 == 0) echo "Test 1 is Equal!?"; if ($test2 == 0) echo "Test 2 is Equal!?"; // Returns: Test 1 is Equal!? 

स्पष्टीकरण के लिए, मैं स्ट्रिंग "0" से $test वैरिएबल की तुलना करने की कोशिश कर रहा हूं। मैं पहले से ही कोड को ठीक करने के लिए जानता हूं जो मैं बस को संलग्न कर सकता हूँ (जैसा मुझे होना चाहिए) "" 0 "" में

मैं सोच रहा हूं कि यह एक PHP बग, एक सर्वर बग या किसी तरह एक वैध ऑपरेशन है। Http://us3.php.net/types.comparisons के अनुसार यह काम नहीं करना चाहिए था

संपादित करें: स्क्रैच, जाहिरा तौर पर यह उल्लेख करता है कि स्ट्रिंग और 0 के बीच ढीली तुलना सही है। लेकिन मुझे अभी भी पता नहीं क्यों

2 संपादित करें: मैंने अपना प्रश्न संशोधित किया है, "3581169b064f71be1630b321d3ca318f" का $test2 मान काम क्यों नहीं करता?

वेब के समाधान से एकत्रित समाधान "स्ट्रिंग को पूर्णांक की तुलना अजीब परिणाम देता है"

PHP मैनुअल से :

संख्याओं में रूपांतरण रूपांतरण

जब एक स्ट्रिंग को एक संख्यात्मक संदर्भ में मूल्यांकन किया जाता है, तो परिणामी मान और प्रकार निम्नानुसार निर्धारित होते हैं।

स्ट्रिंग का मूल्यांकन फ्लोट के रूप में किया जाएगा यदि इसमें कोई भी अक्षर '।', 'ई', या 'ई' होता है। अन्यथा, यह एक पूर्णांक के रूप में मूल्यांकन किया जाएगा

मान स्ट्रिंग के प्रारंभिक भाग द्वारा दिया जाता है। यदि स्ट्रिंग मान्य संख्यात्मक डेटा से शुरू होती है, तो इसका उपयोग किया जाने वाला मूल्य होगा अन्यथा, मान 0 (शून्य) होगा मान्य सांख्यिक डेटा एक वैकल्पिक संकेत है, इसके बाद एक या एक से अधिक अंक (वैकल्पिक रूप से दशमलव बिंदु वाला), एक वैकल्पिक प्रतिपादक द्वारा पीछा किया गया। एक्सपोनेंट एक 'ई' या 'ई' है, जिसके बाद एक या एक से अधिक अंक होते हैं।

== ऑपरेटर का प्रयोग करके रूपांतरण टाइप करें

== ऑपरेटर एक ढीली-टाइप की तुलना है यह दोनों को एक आम प्रकार में बदल देगा और उनकी तुलना करें। जिस तरह से स्ट्रिंग को पूर्णांक में कनवर्ट किया गया है, उसे यहाँ समझाया गया है ।

ध्यान दें कि जिस पेज से आप लिंक करते हैं वह इसका विरोध नहीं करता है। दूसरी तालिका की जांच करें, जहां यह कहता है कि == का उपयोग करके स्ट्रिंग "php" में पूर्णांक 0 तुलना करना सही होगा।

क्या होता है कि स्ट्रिंग को पूर्णांक में कनवर्ट किया जाता है, और गैर-संख्यात्मक स्ट्रिंग्स (स्ट्रिंग्स जो किसी संख्या से शुरू नहीं होती है या शुरू नहीं होती है) 0 परिवर्तित हो जाती है।

संख्यात्मक बनाम गैर-संख्यात्मक तार

एक स्ट्रिंग जिसमें कोई संख्या होती है, या किसी संख्या से शुरू होती है, उसे एक संख्यात्मक स्ट्रिंग माना जाता है। यदि स्ट्रिंग के उस नंबर के बाद दूसरे अक्षर हैं, तो इन्हें अनदेखा कर दिया गया है।

अगर कोई स्ट्रिंग एक वर्ण के साथ शुरू होती है जिसे किसी संख्या के भाग के रूप में व्याख्या नहीं किया जा सकता है, तो यह एक गैर-संख्यात्मक स्ट्रिंग है और 0 बदल जाएगा। इसका मतलब यह नहीं है कि एक संख्यात्मक स्ट्रिंग को अंक (0-9) से शुरू करना होगा – उदाहरण के लिए "-1" एक संख्यात्मक स्ट्रिंग है क्योंकि शून्य से चिन्ह उस मामले में एक नंबर का हिस्सा है।

उदाहरण के लिए, आपकी स्ट्रिंग "d85d1d81b25614a3504a3d5601a9cb2e" संख्या से शुरू नहीं होती है, इसलिए इसे 0 बदल दिया जाएगा। लेकिन आपका दूसरा स्ट्रिंग "3581169b064f71be1630b321d3ca318f" को पूर्णांक 3581169 बदला जाएगा। इसलिए यही है कि आपका दूसरा परीक्षण उसी तरह से काम नहीं करता है।

तुम्हे क्या करना चाहिए

आप शायद चाहते हैं:

 if ($test1 === "0") 

एक डबल बराबर के बजाय ट्रिपल बराबर का उपयोग करें। यह सुनिश्चित करता है कि आप जो तुलना कर रहे हैं वह एक स्ट्रिंग है जिसमें केवल अंक शून्य होता है, और किसी प्रकार के रूपांतरण को रोकता है।

कुछ जांच के बाद, यह पीएचपी मैनुअल से ऐडान को मुहैया कराया गया है कि किसी भी स्ट्रिंग जो किसी संख्या से शुरू नहीं होती है , को पूर्णांक के रूप में डाली जाने पर 0 में कनवर्ट किया जाएगा।

इस का मतलब है कि:

 ("php" == 0) === true ("1php" == 0) === false 

बहुत परेशान और अच्छी तरह से प्रलेखित नहीं। यह प्रकार तुलना पृष्ठ पर टिप्पणियों के नीचे था।

 $test1 = "d85d1d81b25614a3504a3d5601a9cb2e"; 

यह स्ट्रिंग "d" से शुरू होती है, जो मान्य संख्या नहीं है, var 0 को हल करेगा और आपका परीक्षण # 1 पारित होगा।

 $test2 = "3581169b064f71be1630b321d3ca318f"; 

यह स्ट्रिंग 3581169 से शुरू होती है जो कि एक मान्य संख्या है, इसलिए var उस मान को हल करेगा जो कि 0 के बराबर नहीं है। इसलिए आपका परीक्षण # 2 पारित नहीं होगा।

मैं कुछ रूपांतरणों और तुलना की जांच कर रहा हूं यदि संख्यात्मक स्ट्रिंग संख्या है:

 $test1="19de6a91d2ca9d91721d82f1bd8102b6"; echo (float)$test1==$test1; //TRUE echo is_float($test1); //FALSE //Converting the string to float and then converting it to string and compare will do the trick echo (string)((float)$test1)==(string)$test1; //FALSE $test2="5.66"; echo (float)$test2==$test2; //TRUE //Testing the numeric string using `is_float` wont give the expected result echo is_float($test2); //FALSE echo (string)((float)$test2)==(string)$test2; //TRUE