2011-04-26 7 views
39

कोई संख्याओं को कैसे विभाजित करता है लेकिन बाकी को PHP में बहिष्कृत करता है?PHP में शेष के बिना संख्याओं को विभाजित करने के लिए कैसे?

+4

क्या आप अनुस्मारक से क्या मतलब समझ सकते हैं? – Kartik

+1

कार्तिक: 13/2 = 6 शेष 1, क्योंकि दो तेरह छः बार समान रूप से जाते हैं, कुल मिलाकर एक बाएं छोड़ दिया जाता है, जो शेष है। –

+3

कार्तिक इस बारे में एक मजाक उड़ा रहा था कि अनुरोधकर्ता ने शेष को गलत तरीके से कैसे गलत किया। –

उत्तर

70

बस परिणामी मूल्य को int में डालें।

$n = (int) ($i/$m); 

दिलचस्प कार्यों floor(), ceil() और round() (आप क्या हासिल करना चाहते हैं पर निर्भर करता है और यदि आप नकारात्मक पूर्णांक उम्मीद विभाजित करने के लिए) कर रहे हैं। php में

+0

यह कड़ाई से बोल रहा है, एक बुरा विचार है। हालांकि यह छोटे मूल्यों (सभी 32 बिट इन्स सहित) के लिए अच्छी तरह से काम करेगा, फ्लोट सभी 64 बिट पूर्णांक का प्रतिनिधित्व नहीं कर सकता है। यदि '$ i' 2^54 + 2 और' $ m' 2 है, तो विभाजन का परिणाम 2^53 + 1 नहीं हो सकता है, क्योंकि यह डबल-परिशुद्धता फ्लोट के रूप में प्रतिनिधित्व योग्य नहीं है (मैं नहीं कर सकता परीक्षण करें कि 64 बिट सिस्टम पर वास्तविक परिणाम क्या होगा)। – ralokt

-7

उपयोग सापेक्ष:

$n = $i % $m; 
+3

-1 - न केवल यह सवाल का जवाब नहीं देता है, यह यह भी प्रदान करता है कि प्रश्न को विशेष रूप से छोड़ने के लिए कहा गया है: शेष। – danorton

+5

उन लोगों के लिए जो ओवरकिल पसंद करते हैं: यह _can_ मॉड्यूल '$ n = ($ i - $ i% $ m)/$ m के साथ काम करता है;' डी – KingCrunch

-1

या आप बस सकता है intval (13/2) देता 6

5

सबसे व्यावहारिक प्रयोजनों के लिए, स्वीकार किए जाते हैं जवाब सही है।

हालांकि, निर्माण के लिए जहां पूर्णांक 64 बिट चौड़े होते हैं, सभी संभव पूर्णांक मान डबल-परिशुद्धता फ्लोट के रूप में प्रतिनिधित्व योग्य नहीं होते हैं; विवरण के लिए स्वीकृत उत्तर पर मेरी टिप्पणी देखें।

$n = ($i - $i % $m)/$m; 

(एक और उत्तर के तहत KingCrunch की टिप्पणी से लिया कोड) की एक बदलाव वांछित गोलाई व्यवहार (मन में भालू है कि मापांक ऑपरेटर का परिणाम नकारात्मक हो सकता है) के आधार पर इस समस्या से बचने होगा।

निर्णय के अलावा
0

$result = intval($a/$b) की तरह एक विशेष मामले होती है इसके बाद के संस्करण:

आप एक पूर्णांक प्रभाग (शेष के बिना) ($b2^N है) दो के कुछ शक्ति आप सही पारी आपरेशन बिटवाइज़ उपयोग कर सकते हैं की जरूरत है:

$result = $a >> $N; 

जहां $ एन 32-बिट ऑपरेटिंग सिस्टम पर 64 से 64 या 64-बिट के लिए 64 से 1 है।

कभी-कभी यह उपयोगी होता है क्योंकि $ बी के मामले में यह सबसे तेज़ निर्णय दो की शक्ति है।

और वहाँ दो की शक्ति से गुणा करने के लिए एक पिछड़े (सावधान अतिप्रवाह के कारण हो!) आपरेशन है:

$result = $a << $N; 

आशा इस किसी के लिए भी मदद करता है।

1

PHP 7 का नाम intdiv नामक एक नया अंतर्निहित फ़ंक्शन है।

उदाहरण:

$result = intdiv(13, 2); 

इस उदाहरण में $result का मूल्य 6 हो जाएगा।

आप PHP documentation में इस फ़ंक्शन के लिए पूर्ण दस्तावेज़ीकरण पा सकते हैं।