2009-06-25 18 views
80

दो 32 बिट int संख्याओं को विभाजित करने के रूप में (int/int) मुझे 0 पर लौटाता है, लेकिन यदि मैं Decimal.Divide() का उपयोग करता हूं तो मुझे सही उत्तर मिलता है? मैं कोई सी # लड़का नहीं हूँ।दशमलव क्यों है। डाइवइड (int, int) काम, लेकिन नहीं (int/int)?

+1

क्या आप एक विशिष्ट उदाहरण प्रदान कर सकते हैं? दशमलव 32 से एक अलग प्रकार है। – Groo

+0

जिस तरह से मैंने पाया [Decimal.Divide] (https://msdn.microsoft.com/en-us/library/system.decimal.divide%28v=vs.110%29.aspx) इनपुट के रूप में केवल दशमलव लेता है। – Ravi

उत्तर

158

int एक पूर्णांक प्रकार है; दो इन्स को विभाजित करने से पूर्णांक डिवीजन निष्पादित करता है, यानी आंशिक भाग छोटा कर दिया जाता है क्योंकि इसे परिणाम प्रकार में संग्रहीत नहीं किया जा सकता है (int!)। Decimal, इसके विपरीत, एक आंशिक हिस्सा मिला है। Decimal.Divide का आह्वान करके, आपके int तर्कों को पूरी तरह से Decimal एस में परिवर्तित कर दिया गया है।

आप स्पष्ट रूप से बहस के कम से कम एक कास्टिंग एक फ्लोटिंग प्वाइंट प्रकार के, जैसे द्वारा int तर्क पर गैर पूर्णांक विभाजन को लागू कर सकते हैं:

int a = 42; 
int b = 23; 
double result = (double)a/b; 
+2

सही और संक्षिप्त। – nsantorello

+2

अच्छा जवाब। मैंने दशमलव का भी प्रयास किया। डिवाइड (ए, बी) जिसने एक ही परिणाम दिया। – Baxter

+0

आकर्षण की तरह काम करते हैं! – Bhimbim

0

आप देख रहे हैं 0 < एक < 1 उत्तर के लिए , int/int पर्याप्त नहीं होगा। int/int पूर्णांक विभाजन करता है। ऑपरेशन के अंदर एक int की int को कास्ट करने का प्रयास करें।

+1

इंट 32 एक हस्ताक्षरित पूर्णांक है, क्या आपका मतलब 0 <उत्तर <1 है? – Groo

+0

हां हां, पकड़ने के लिए धन्यवाद! – Brian

2

मुझे लगता है Decimal.Divide(decimal, decimal) परोक्ष दशमलव मान लौटने (स्पष्ट) जहां 4/5 के रूप में पूर्णांक विभाजन के रूप में व्यवहार किया जाता है इससे पहले कि दशमलव करने के लिए अपने 2 पूर्णांक तर्क धर्मान्तरित और रिटर्न पूर्णांक 0

6

पहले मामले में, आप कर रहे हैं विभाजन, तो परिणाम छोटा कर दिया जाता है (दशमलव भाग काटा जाता है) और एक पूर्णांक वापस कर दिया जाता है।

दूसरे मामले में, इनट्स को पहले दशमलव में परिवर्तित कर दिया जाता है, और परिणाम दशमलव होता है। इसलिए उन्हें छोटा नहीं किया जाता है और आपको सही परिणाम मिलते हैं।

3

निम्न पंक्ति:

int a = 1, b = 2; 
object result = a/b; 

... पूर्णांक गणित का उपयोग कर प्रदर्शन किया जाएगा। Decimal.Divide दूसरी ओर Decimal प्रकार के दो पैरामीटर लेता है, इसलिए विभाजन पूर्णांक मानों के बजाय दशमलव मानों पर किया जाएगा।

int a = 1, b = 2; 
object result = (Decimal)a/(Decimal)b; 

इस जांच करने के लिए, आप ऊपर के उदाहरण से प्रत्येक के बाद निम्नलिखित कोड लाइनों जोड़ सकते हैं:: यह इस के बराबर है

Console.WriteLine(result.ToString()); 
Console.WriteLine(result.GetType().ToString()); 

पहले मामले में उत्पादन किया जाएगा

0 
System.Int32 
दूसरे मामले में

..और:

0,5 
System.Decimal 
1

आप संख्याओं को कास्ट करना चाहते हैं:

डबल सी = (डबल) ए/(डबल) बी;

नोट: यदि सी # में कोई भी तर्क डबल है, तो डबल विभाजन का उपयोग किया जाता है जिसके परिणामस्वरूप डबल होता है।तो, निम्नलिखित भी काम करेंगे:

डबल सी = (डबल) ए/बी;

यहाँ एक छोटा प्रोग्राम है:

static void Main(string[] args) 
     { 
      int a=0, b = 0, c = 0; 
      int n = Convert.ToInt16(Console.ReadLine()); 
      string[] arr_temp = Console.ReadLine().Split(' '); 
      int[] arr = Array.ConvertAll(arr_temp, Int32.Parse); 
      foreach (int i in arr) 
      { 
       if (i > 0) a++; 
       else if (i < 0) b++; 
       else c++; 
      } 
      Console.WriteLine("{0}", (double)a/n); 
      Console.WriteLine("{0}", (double)b/n); 
      Console.WriteLine("{0}", (double)c/n); 
      Console.ReadKey(); 
     } 
-1

जवाब में चिह्नित के रूप में ऐसी बहुत लगभग वहाँ है, लेकिन मुझे लगता है कि इसे जोड़ने वहाँ डबल और दशमलव का उपयोग कर के बीच एक अंतर है कि लायक है।

मैं विकिपीडिया की तुलना में अवधारणाओं समझा एक बेहतर काम कर नहीं होता, तो मैं बस संकेत प्रदान करेगा:

floating-point arithmetic

decimal data type

वित्तीय प्रणाली में, यह अक्सर एक आवश्यकता है कि हम एक निश्चित संख्या (आधार -10) दशमलव स्थानों की सटीकता की गारंटी दे सकते हैं। यह आम तौर पर असंभव है यदि इनपुट/स्रोत डेटा बेस -10 में है लेकिन हम आधार -2 में अंकगणित करते हैं (क्योंकि किसी संख्या के दशमलव विस्तार के लिए आवश्यक दशमलव स्थानों की संख्या आधार पर निर्भर करती है; एक तिहाई असीमित रूप से कई दशमलव लेता है बेस -10 में 0.333333 के रूप में व्यक्त करने के लिए स्थान ..., लेकिन बेस -3: 0.1 में केवल एक दशमलव लगता है)।

फ़्लोटिंग-पॉइंट संख्याएं काम करने के लिए तेज़ हैं (CPU समय के संदर्भ में; प्रोग्रामिंग के अनुसार वे समान रूप से सरल हैं) और जब भी आप गोल करने की त्रुटि को कम करना चाहते हैं (वैज्ञानिक अनुप्रयोगों में)।

+0

आपकी प्रतिक्रिया में कुछ भी मूल प्रश्न का उत्तर देने में कार्य करता है – LordWilmore

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