2011-06-10 6 views
23

जब मैं सी # में विभाजन करता हूं, तो यह स्वचालित रूप से नीचे घूमता है। यह उदाहरण देखें:सी # अपने आप से विभाजन नीचे घूम रहा है

double i; 
i = 200/3; 
Messagebox.Show(i.ToString()); 

यह मुझे "66" युक्त एक संदेश बॉक्स दिखाता है। 200/3 वास्तव में 66.66666 ~ है।

क्या कोई तरीका है कि मैं इस गोल से बचने और 66.6666667 जैसी संख्या बनाए रख सकता हूं?

+9

यहां महत्वपूर्ण सबक यह नहीं है कि पूर्णांक में पूर्णांक अंकगणित किया जाता है। इसके बजाय, यह है कि * ऑपरेंड * के प्रकार प्रोग्राम विश्लेषण के लिए अधिक प्रासंगिक होते हैं, जिसके परिणामस्वरूप परिणाम दिया जा रहा है। सी # में हम लगभग हमेशा "अंदर" से "बाहर" का कारण बनते हैं; हम यह नहीं कहते हैं "ओह, मुझे लगता है कि आप इसे डबल पर असाइन कर रहे हैं, इसलिए मैं अस्थायी बिंदु अंकगणित करूंगा"। इसके बजाए हम कहते हैं, "मुझे लगता है कि आप दो पूर्णांक को विभाजित कर रहे हैं; आपको परिणाम को पूर्णांक के रूप में देखना चाहिए। ओह, आप उस पूर्णांक को डबल के रूप में चाहते हैं? तो हम इसे एक डबल में बदल देंगे।" –

+0

मैं वर्तमान में भी इस "समस्या" को देख रहा हूं। मैं नीचे से देख सकता हूं कि दो पूर्णांक को विभाजित करने के कारणों को एक पूर्णांक में क्यों परिणाम मिलता है, और मैं इससे खुश हूं। हालांकि, जो मैं समझ नहीं पा रहा हूं वह निम्न है: C#/VB.Net दौर 200/3 में 66 क्यों है? हम जानते हैं, कि अगर हम निम्नलिखित "200/3.0" करते हैं तो हम 66.6666667 के साथ समाप्त होते हैं। तो यह 66 तक गोल क्यों हो रहा है, और 67 तक नहीं घूम रहा है? अगर मैं निम्नलिखित करते हैं, मैं 67 के साथ अंत: Convert.ToInt32 (200/3,0) तो मेरी दशमलव int करने के लिए 67 हो जाता है, फिर भी क्रम 66 के लिए मेरा नंबर में परिवर्तित कर देंगे? – Oxonhammer

उत्तर

37

i = 200/3 पूर्णांक विभाजन कर रहा है।

प्रयास करें या तो:

i = (double)200/3

या

i = 200.0/3

या

i = 200d/3

एक करते हैं के रूप में स्थिरांक में से एक की घोषणा यूबल डबल डिवीजन ऑपरेटर का उपयोग करने का कारण बन जाएगा।

6

200/3 पूर्णांक विभाजन है, जिसके परिणामस्वरूप एक पूर्णांक होता है।

कोशिश 200,0/3,0

+0

या 200/3.0। या 200.0/3. या (डबल) 200/3. या 200/(डबल) 3. या फिर आप इसे करना चाहते हैं। – JAB

+0

@JAB सोचने का कोई समय नहीं, बस पहले वहां जाना था :) –

+0

आह आदमी! पहले होने के लिए बहुत कुछ! –

3

200/3 इस एक पूर्णांक प्रभाग है। इसे एक फ़्लोटिंग पॉइंट डिवीजन बनाने के लिए: 200.0/3 पर बदलें।

0

200 और 3 दोनों पूर्णांक हैं, इसलिए परिणाम एक पूर्णांक होगा। उनमें से एक को दशमलव में कनवर्ट करें।

1

इस

i = 200d/3d; 

की कोशिश करो और यह दौर नहीं होगा।

2

डबल i = 200.0/3;

डबल i = ((डबल) 200)/3;

क्या होता है दो पूर्णांक एक पूर्णांक विभाजन करते हैं, और फिर पूर्णांक उत्तर फ्लोट को सौंपा जाता है। इससे बचने के लिए, हमेशा संख्याओं में से एक को डबल के रूप में डालें।

3

हालांकि उत्तर वास्तव में 66.666 है, क्या हो रहा है कि 200/3 की गणना की जा रही है जिसके परिणामस्वरूप एक पूर्णांक होता है। फिर पूर्णांक को फ्लोट में रखा जा रहा है। गणित स्वयं पूर्णांक गणित के रूप में हो रहा है। इसे एक फ्लोट बनाने के लिए, 200.0/3. का उपयोग करें .00 इसे फ्लोट के रूप में 200 का इलाज करने का कारण बनता है, जिसके परिणामस्वरूप फ्लोटिंग पॉइंट गणित होता है।

3

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

अधिक जानकारी: decimal vs double! - Which one should I use and when?

5

आप दशमलव ponits की वांछित संख्या के साथ प्रारूप स्ट्रिंग निर्दिष्ट कर सकते हैं: क्योंकि वे में से एक में पूर्णांक विभाजन का अनुवाद

double i; 
i = 200/3.0; 
Messagebox.Show(i.ToString("F6")); 
-1

सभी दिए गए उत्तर गलत हैं दयालु डबल, जो स्पष्ट रूप से नहीं पूछा गया था (कम से कम एक प्रदर्शन दृष्टिकोण से)। स्पष्ट उत्तर प्राथमिक विद्यालय गणित है, 10 से गुणा करें, 5 जोड़ें और फिर से विभाजित करें, सभी पूर्णांक।

मैं = (2000/3 + 5)/10

आप एक दूसरे विभाजन यहाँ है, जो सही से डबल रूपांतरण कर की तुलना में बेहतर है लेकिन अभी भी दूर है पकड़ने रहे हैं। आप आगे भी जा सकते हैं और एक और कारक से गुणा कर सकते हैं और पांच से अधिक मूल्य जोड़ सकते हैं, इस प्रकार आप 10 से विभाजित करने के बजाय सही स्थानांतरण का उपयोग कर सकते हैं। ऐसा करने के लिए सटीक सूत्र पाठक को व्यायाम के रूप में छोड़ दिया जाता है। (बस Google "मल्टीप्ली शिफ्ट के साथ डिवीजन")

एक अच्छा दिन है।

+0

नहीं। यह ओपी के नमूना कोड से स्पष्ट है कि वह 'int' के बिना छंटनी के बिना 'डबल' परिणाम चाहता है। –