पूर्णांक विभाजित करें और पूर्णांक मान प्राप्त करें


85

C या अजगर जैसी भाषाओं में, यदि मैं पूर्णांक द्वारा पूर्णांक को विभाजित करता हूं, तो मुझे पूर्णांक मिलता है:

>>> 8/3
2

लेकिन PHP में, यदि मैं एक पूर्णांक को किसी अन्य पूर्णांक से विभाजित करता हूं, तो /कभी-कभी मुझे एक फ्लोट मिलता है:

php > var_dump(6/3);
int(2)
php > var_dump(8/3);
float(2.6666666666667)

मैं अजगर या सी की तरह विभाजन करना चाहूंगा, ताकि 8/3 2 हो। मैं पीएचपी में कैसे कर सकता हूं?


संभव डुप्लिकेट प्रश्न / 2055469
कांति पॉल

यदि आप उपरोक्त गोल करते हैं, तो आपको मिलेगा 6, आपको 5 या 6 की आवश्यकता है?
Starx

1
@ स्टार्क्स: एक से अधिक राउंडिंग प्रकार हैं: en.wikipedia.org/wiki/Rounding#Tie-breaking । तो अगर आप 5.6 गोल करते हैं - तो आपको पता नहीं है कि आपको क्या मिलता है (यह निर्दिष्ट किए बिना कि आप इसे कैसे गोल करना चाहते हैं)
zxms

1
@zerkms, हाँ वास्तव में काम करते हैं ceil()और floor()ऐसे कार्य हैं जो अलग-अलग तरीके से करते हैं।
स्टारएक्स

जवाबों:


94

round()पूर्णांक गोल मान प्राप्त करने के लिए फ़ंक्शन का उपयोग करें ।

round(8 / 3); // 3

या

floor()पूर्णांक मान प्राप्त करने के लिए फ़ंक्शन का उपयोग करें

floor(8 / 3); // 2

10
सहमत मत हो। फ्लोर (-8 / 3) === -3.0 लेकिन -2 होना चाहिए
बाइस्क्रिप्स

14
ध्यान दें कि एक पूर्णांक नहीं floor()लौटाएगा float, इसलिए आपको मिलता है 2.0और नहीं 2। यह सुनिश्चित करने के लिए परिणाम प्राप्त करें कि आपको पूर्णांक मिल जाए:(int)floor(8/3)
जेसन

2
@ByScripts -8/3 = -3 पूर्णांक विभाजन के रूप में मान्य है जिस तरह से -8/3 = -2 के रूप में काम करना है । पूर्व में "नकारात्मक अनंत की ओर झुकाव" है, और बाद में "शून्य की ओर झुकाव" है। दोनों के फायदे हैं, और विभिन्न भाषाएं अलग-अलग व्यवहार का चयन करती हैं। उदाहरण के लिए, C शून्य की ओर बढ़ता है (जैसा कि PHP 7 का है intdiv), जबकि पायथन नकारात्मक अनंत की ओर बढ़ता है।
मार्क अमेरी

ध्यान दें कि छत () हमेशा गोल होती है।
एल्स

73

पीएचपी 7 में, वहाँ है intdiv समारोह वास्तव में कर रही है तुम क्या चाहते।

उपयोग:

intdiv(8, 3);

लौटता है 2


5
यह वास्तव में एक बहुत आश्चर्य की बात है कि यह फ़ंक्शन केवल PHP 7 :) ओह के साथ पेश किया गया है, पहले से कहीं ज्यादा देर से बेहतर।
एरिक गोपक

1
क्या इसका कोई समाधान है जैसे php 5.6
उस्मान अली मान

1
इस के रूप में सीधा नहीं है, नहीं। PHP 5.6 में, स्वीकृत उत्तर का उपयोग करें :)
मारेक लिसनी

23

PHP में कोई पूर्णांक विभाजन ऑपरेटर नहीं है। 1/2 फ्लोट 0.5 की उपज देता है। मान को एक पूर्णांक तक नीचे की ओर गोल करने के लिए डाला जा सकता है, या गोल () फ़ंक्शन राउंडिंग पर बेहतर नियंत्रण प्रदान करता है।


var_dump(25/7);           // float(3.5714285714286)    
var_dump((int) (25/7));   // int(3)   
var_dump(round(25/7));    // float(4)     

पीएचपी मैनुअल


8

इसे इस्तेमाल करो....

intval(1700000 / 300000 )...

यह पूर्णांक मान लौटाता है।


5
(int)(1700000 / 300000);

कास्टिंग का उपयोग करें।


4
अरे! सिर्फ इसलिए कि (0.1 + 0.7) == 0.799999 ... 0.8 के बजाय :) :) :)
जेसी चिशोल्म

3
@ luc.chante उदाहरण आप देते हैं जो फ़्लोटिंग पॉइंट त्रुटि के कारण होता है। का सटीक मान (0.1 + 0.7) * 10है 7.99999999999999911182158029987476766109466552734375। यह पूरी तरह से सही है कि एक (int)कास्ट इस मान को 7 से छोटा कर देता है। किसी पूर्णांक द्वारा किसी पूर्णांक को विभाजित करते समय, जैसा कि प्रश्न और उत्तर में होता है, इस तरह की फ्लोटिंग पॉइंट त्रुटि पोस्ट-ट्रंकेशन परिणाम को बदल नहीं सकती है।
मार्क अमेरी

पूर्णांक विभाजन करते समय यह C / C ++ में अपेक्षित व्यवहार को पुन: पेश करता है, इसलिए मुझे कोई समस्या दिखाई नहीं देती है।
एलेक्सिस विलके

5

PHP में पूर्णांक विभाजन करने के कई तरीके हैं। पूर्णांक विभाजन के लिए भाषा में ऑपरेटर नहीं होता है, लेकिन फ़्लोटिंग पॉइंट भागफल को पूर्णांक में गोल करने के लिए कई विकल्प होते हैं:

<?php
$pos = 1;
$neg = -1;
$divisor = 2;

// No rounding (float division)
var_dump($pos / $divisor);          //  0.5 (float)
var_dump($neg / $divisor);          // -0.5 (float)

// Round toward zero (like C integer division)
var_dump((int)($pos / $divisor));   //  0 (int)
var_dump((int)($neg / $divisor));   //  0 (int)

// Round half away from zero
var_dump(round($pos / $divisor));   //  1 (float)
var_dump(round($neg / $divisor));   // -1 (float)

// Round down
var_dump(floor($pos / $divisor));   //  0 (float)
var_dump(floor($neg / $divisor));   // -1 (float)

# And on PHP 7 you can round toward zero with intdiv():
var_dump(intdiv($pos, $divisor));   //  0 (int)
var_dump(intdiv($neg, $divisor));   //  0 (int)  Rounded toward zero

PHP 7 पर आप intdiv($p, $q)सीधे पूर्णांक विभाजन का उपयोग कर सकते हैं । यह (int)($p / $q)PHP 5 पर बराबर है ।


4

आप अंतिम छोर तक जोड़कर कमी का उपयोग कर सकते हैं

8/3 | 0


3
-1; यह "बिटवाइज़ या" ऑपरेटर का एक भ्रामक दुरुपयोग है। मोटे तौर पर, यह काम करता है (चूंकि ऑपरेंड से लेकर बिटवाइज़ ऑपरेटर को पूर्णांक में डाल दिया जाता है, जो राउंड वैल्यू डाउन हो जाता है, और बिटवाइज़ का वास्तविक संचालन या परिणामी पूर्णांक मान में कोई परिवर्तन नहीं होता है), लेकिन एक देवता के लिए इस कोड को पढ़ने के क्रम में यह समझें कि यह क्यों काम करता है, उन्हें PHP के बिटवाइज ऑपरेटरों के कास्टिंग व्यवहार (जो कि अस्पष्ट सामान्य ज्ञान है, जिसे जानने की आवश्यकता है, PHP के 99% devs के पास नहीं होगा) और यह कि एक बिटवाइज़ या 0 के साथ एक मान अपरिवर्तित रहता है (गारंटी नहीं है, क्योंकि सभी वेब देवता बिट संचालन को समझते हैं)।
मार्क अमेरी

1
@MarkAmery, इस तथ्य के बारे में कि मोसेस डेवलपर्स को इसके बारे में पता नहीं है, इसका मतलब यह नहीं है कि यह काम नहीं करता है। और जाहिर है कि इसे उखाड़ने का एक अच्छा कारण है, इसलिए लोग इसका उपयोग करना सीखेंगे।
बेसी

2
हां यह भ्रामक है इसलिए इसे उत्पादन कोड में उपयोग नहीं किया जाना चाहिए, लेकिन यह इस तथ्य को नहीं बदलता है कि यह समस्या का एक दिलचस्प समाधान है
टॉमाज़ स्विडर

@TomaszSwider कुछ लोग सबसे छोटे समाधान (विशेषकर कुछ कोड चुनौतियों में) भी खोज सकते हैं।
बेसि

1
इसका उपयोग हर समय जावास्क्रिप्ट में किया जाता है। प्रोग्रामर्स को अब तक इस ट्रिक के बारे में पता होना चाहिए ...
एलेक्सिस विल्के 25'19

3

के लिए पीएचपी 7 कोशिश intdiv()फंक्शन:

वाक्य - विन्यास: int intdiv($dividend, $divisor)

          <?php           
           $dividend = 19; 
           $divisor = 3;  
           echo intdiv($dividend, $divisor); 
           ?>

PHP के पुराने संस्करणों के लिए:

         <?php
     // Convert $total_minutes to hours and minutes.

         $total_minutes = 640;
         $minutes = $total_minutes % 60;
         $hours = ($total_minutes - $minutes) / 60;

         echo "Time taken was $hours hours $minutes minutes";
         ?>

अगस्त, 2019 तक यह एकमात्र सही उत्तर है।
डोमक्यू

0

PHP संस्करण 7 => के लिए intdiv(a,b)

और 7 से कम संस्करणों के लिए (जैसे 5.6) => (int)floor(abs(a/b))


बड़े पूर्णांकों के लिए काम नहीं करता है। देखें stackoverflow.com/questions/54606140
WiM
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.