दो 32 बिट int संख्याओं को विभाजित करने के रूप में (int/int) मुझे 0
पर लौटाता है, लेकिन यदि मैं Decimal.Divide()
का उपयोग करता हूं तो मुझे सही उत्तर मिलता है? मैं कोई सी # लड़का नहीं हूँ।दशमलव क्यों है। डाइवइड (int, int) काम, लेकिन नहीं (int/int)?
उत्तर
int
एक पूर्णांक प्रकार है; दो इन्स को विभाजित करने से पूर्णांक डिवीजन निष्पादित करता है, यानी आंशिक भाग छोटा कर दिया जाता है क्योंकि इसे परिणाम प्रकार में संग्रहीत नहीं किया जा सकता है (int
!)। Decimal
, इसके विपरीत, एक आंशिक हिस्सा मिला है। Decimal.Divide
का आह्वान करके, आपके int
तर्कों को पूरी तरह से Decimal
एस में परिवर्तित कर दिया गया है।
आप स्पष्ट रूप से बहस के कम से कम एक कास्टिंग एक फ्लोटिंग प्वाइंट प्रकार के, जैसे द्वारा int
तर्क पर गैर पूर्णांक विभाजन को लागू कर सकते हैं:
int a = 42;
int b = 23;
double result = (double)a/b;
सही और संक्षिप्त। – nsantorello
अच्छा जवाब। मैंने दशमलव का भी प्रयास किया। डिवाइड (ए, बी) जिसने एक ही परिणाम दिया। – Baxter
आकर्षण की तरह काम करते हैं! – Bhimbim
मुझे लगता है Decimal.Divide(decimal, decimal)
परोक्ष दशमलव मान लौटने (स्पष्ट) जहां 4/5 के रूप में पूर्णांक विभाजन के रूप में व्यवहार किया जाता है इससे पहले कि दशमलव करने के लिए अपने 2 पूर्णांक तर्क धर्मान्तरित और रिटर्न पूर्णांक 0
पहले मामले में, आप कर रहे हैं विभाजन, तो परिणाम छोटा कर दिया जाता है (दशमलव भाग काटा जाता है) और एक पूर्णांक वापस कर दिया जाता है।
दूसरे मामले में, इनट्स को पहले दशमलव में परिवर्तित कर दिया जाता है, और परिणाम दशमलव होता है। इसलिए उन्हें छोटा नहीं किया जाता है और आपको सही परिणाम मिलते हैं।
निम्न पंक्ति:
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
आप संख्याओं को कास्ट करना चाहते हैं:
डबल सी = (डबल) ए/(डबल) बी;
नोट: यदि सी # में कोई भी तर्क डबल है, तो डबल विभाजन का उपयोग किया जाता है जिसके परिणामस्वरूप डबल होता है।तो, निम्नलिखित भी काम करेंगे:
डबल सी = (डबल) ए/बी;
यहाँ एक छोटा प्रोग्राम है:
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();
}
जवाब में चिह्नित के रूप में ऐसी बहुत लगभग वहाँ है, लेकिन मुझे लगता है कि इसे जोड़ने वहाँ डबल और दशमलव का उपयोग कर के बीच एक अंतर है कि लायक है।
मैं विकिपीडिया की तुलना में अवधारणाओं समझा एक बेहतर काम कर नहीं होता, तो मैं बस संकेत प्रदान करेगा:
वित्तीय प्रणाली में, यह अक्सर एक आवश्यकता है कि हम एक निश्चित संख्या (आधार -10) दशमलव स्थानों की सटीकता की गारंटी दे सकते हैं। यह आम तौर पर असंभव है यदि इनपुट/स्रोत डेटा बेस -10 में है लेकिन हम आधार -2 में अंकगणित करते हैं (क्योंकि किसी संख्या के दशमलव विस्तार के लिए आवश्यक दशमलव स्थानों की संख्या आधार पर निर्भर करती है; एक तिहाई असीमित रूप से कई दशमलव लेता है बेस -10 में 0.333333 के रूप में व्यक्त करने के लिए स्थान ..., लेकिन बेस -3: 0.1 में केवल एक दशमलव लगता है)।
फ़्लोटिंग-पॉइंट संख्याएं काम करने के लिए तेज़ हैं (CPU समय के संदर्भ में; प्रोग्रामिंग के अनुसार वे समान रूप से सरल हैं) और जब भी आप गोल करने की त्रुटि को कम करना चाहते हैं (वैज्ञानिक अनुप्रयोगों में)।
आपकी प्रतिक्रिया में कुछ भी मूल प्रश्न का उत्तर देने में कार्य करता है – LordWilmore
- 1. क्यों countDownLatch.getCount() एक लंबा लेकिन एक int नहीं देता है?
- 2. स्कैला: सूची क्यों नहीं है [=> Int] काम करता है?
- 3. क्यों int शून्य नहीं हो सकता है? सी # में शून्य करने योग्य int (int?) कैसे काम करता है?
- 4. एसक्यूएल कास्ट int से दशमलव
- 5. int
- 6. क्यों जावा कैलेंडर सेट (int वर्ष, int month, int date) सही तिथि नहीं लौटा रहा है?
- 7. 'int' ऑब्जेक्ट प्रतिदेय नहीं है
- 8. static_cast कैसे int int को डाला जा सकता है लेकिन reinterpret_cast नहीं?
- 9. स्ट्रिंग बदल नहीं सकता है। लेकिन int, char
- 10. int * से int
- 11. php string int int
- 12. क्यों स्ट्रिंग स्ट्रिंग की अनुमति है और कंपाइलर द्वारा int int की अनुमति नहीं है?
- 13. एक कॉन्स int अंतर्निहित रूप से बाइट को क्यों डाला जाता है, लेकिन एक परिवर्तनीय int नहीं करता है?
- 14. वेक्टर <const int> की अनुमति नहीं है। जोड़ी <const int, int> अनुमति क्यों है?
- 15. एक int (*) (int)
- 16. Int प्राथमिक कुंजी - int int से अधिक
- 17. स्थिर int int और int के बीच क्या अंतर है?
- 18. const int = int const?
- 19. INT
- 20. int
- 21. int
- 22. int
- 23. int
- 24. हास्केल: जांचें कि Int Int
- 25. int
- 26. int
- 27. int
- 28. मैथ क्यों नहीं है। राउंड एक int वापस?
- 29. 32 बिट int * 32 बिट int = 64 बिट int?
- 30. * (int *) 0 = 0 क्यों पहुंच उल्लंघन का कारण नहीं है?
क्या आप एक विशिष्ट उदाहरण प्रदान कर सकते हैं? दशमलव 32 से एक अलग प्रकार है। – Groo
जिस तरह से मैंने पाया [Decimal.Divide] (https://msdn.microsoft.com/en-us/library/system.decimal.divide%28v=vs.110%29.aspx) इनपुट के रूप में केवल दशमलव लेता है। – Ravi