2012-02-26 13 views
7

संभव डुप्लिकेट:
C programming divisionपूर्णांक विभाजन हमेशा शून्य

शायद मेरे सवाल का बहुत ही सरल और बेवकूफ है। मैं विशेष रूप से 1/x पर एक विभाजन का मान संग्रहीत करना चाहता हूं, जहां x पूर्णांक मान है।

int x = 17; 
double result = 1/x; 

मैं इसे करने की कोशिश लेकिन मैं हमेशा उदाहरण 1/17 के लिए 0.000000 ... मैं एक्स में ठीक किया गया कोई मान दर्ज करने की कोशिश, मिल, लेकिन हमेशा एक ही मूल्य मिल .. क्या गलत है?

उत्तर

25

आप पूर्णांक विभाजन कर रहे हैं।

निम्नलिखित का प्रयास करें और यह उम्मीद के रूप में काम करेगा:

int x = 17; 
double result = 1.0/x; 

अभिव्यक्ति में 1 के प्रकार आप ऊपर है int है, और x के प्रकार int है। जब आप int/int करते हैं, तो आपको एक इंट बैक मिलता है। फ़्लोटिंग पॉइंट डिवीजन होने के लिए आपको फ्लोटिंग पॉइंट (float या double) होने के लिए कम से कम एक प्रकार की आवश्यकता है।

गणित के विपरीत, सी ++ में विभाजन या तो छिड़काव पूर्णांक विभाजन (आपने क्या किया) या फ़्लोटिंग पॉइंट डिवीजन (जो मैंने अपने उदाहरण में किया) को संदर्भित कर सकते हैं। इस से सावधान रहें!

मेरे उदाहरण में, स्पष्ट रूप से हमारे पास double/int -> double है।

+3

या इसे स्पष्ट करने के लिए: 'डबल परिणाम = (डबल) 1/x;' – Nobody

+1

@ नोबॉडी तो आपका मतलब है 'डबल परिणाम = 1.0/x; '? खैर, संकलक आपके लिए यह करेगा लेकिन वह आपको दोहरी शाब्दिक पहचानने के लिए हंस सकता है। –

+1

@ क्रिस्टियन राउ स्वचालित प्रकार को और अधिक दृश्यमान बनाने के लिए यह एक व्यावहारिक उदाहरण था। निश्चित रूप से एक प्रोग्रामर के रूप में मैं हमेशा '1.0' लिखता हूं क्योंकि यह बहुत छोटा है। – Nobody