2012-10-11 8 views
47

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

>>> 8/3 
2 

लेकिन PHP में, अगर मैं के साथ एक और पूर्णांक द्वारा एक पूर्णांक विभाजित /, कभी कभी मैं एक नाव मिलती है:

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

ताकि 8/3 2. है मैं PHP में ऐसा कर सकते हैं कैसे मैं अजगर या सी में की तरह विभाजन करने के लिए, चाहते हैं?

+0

संभावित डुप्लिकेट [प्रश्न/2055469] (http://stackoverflow.com/questions/2055469/php-typecasting-float-int) –

+0

यदि आप उपरोक्त दौर में हैं, तो आपको मिल जाएगा '6', आपको 5 या 6 की क्या ज़रूरत है? – Starx

+1

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

उत्तर

64

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

round(8/3); // 3 

या

उपयोग floor() समारोह पूर्णांक मान

floor(8/3); // 2 
+6

सहमत नहीं है। मंजिल (-8/3) === -3।0 लेकिन -2 – ByScripts

+6

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

+0

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

19

वहाँ 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)  

PhP manual

3

उपयोग इस ....

intval(1700000/300000)... 

इस पूर्णांक मान देता है।

3
(int)(1700000/300000); 

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

+4

कभी भी int को फ्लोट न करें !!! "7" !!! –

+3

अरे! सिर्फ इसलिए कि (0.1 + 0.7) == 0.7 99 999 ... 0.8 के बजाय :) :) :) –

+2

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

30

PHP 7 में, intdiv फ़ंक्शन ठीक वही कर रहा है जो आप चाहते हैं।

उपयोग:

intdiv(8, 3); 

रिटर्न 2। अंत

8/3 0 | |

+1

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

1

आप जोड़कर संक्षिप्त रूप का उपयोग कर सकते 0

+2

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

+0

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

+1

जीत –

3

वहाँ PHP में पूर्णांक विभाजन प्रदर्शन करने के लिए कई तरीके हैं। भाषा पूर्णांक विभाजन के लिए एक ऑपरेटर नहीं है, लेकिन वहाँ एक पूर्णांक के लिए चल बिन्दु भागफल गोलाई के लिए कई विकल्प हैं:

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

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

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

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

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

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

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

+1

ध्यान दें कि यहां दिखाए गए सभी दृष्टिकोणों में समान वापसी प्रकार नहीं है - '(int)' cast और 'intdiv() 'कॉल रिटर्न इन्स, लेकिन' राउंड() 'और' floor() 'दोनों रिटर्न फ्लोट्स। –

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