दो 32 बिट इंट संख्याओं को (इंट / इंट) के रूप में विभाजित करने पर मुझे कैसे वापस आता है 0
, लेकिन अगर मैं उपयोग करता Decimal.Divide()
हूं तो मुझे सही उत्तर मिलेगा? मैं किसी भी तरह से एसी # आदमी नहीं हूँ।
दो 32 बिट इंट संख्याओं को (इंट / इंट) के रूप में विभाजित करने पर मुझे कैसे वापस आता है 0
, लेकिन अगर मैं उपयोग करता Decimal.Divide()
हूं तो मुझे सही उत्तर मिलेगा? मैं किसी भी तरह से एसी # आदमी नहीं हूँ।
जवाबों:
int
पूर्णांक प्रकार है; विभाजित दो ints एक पूर्णांक विभाजन करता है , अर्थात भिन्नात्मक भाग को काट दिया जाता है क्योंकि इसे परिणाम प्रकार (भी int
!) में संग्रहीत नहीं किया जा सकता है । Decimal
, इसके विपरीत, एक आंशिक हिस्सा मिला है। आह्वान करने से Decimal.Divide
, आपकी int
दलीलें निहितार्थ में बदल जाती हैं Decimal
।
आप int
फ़्लोटिंग-पॉइंट प्रकार के कम से कम एक तर्क को स्पष्ट रूप से डालकर तर्कों पर गैर-पूर्णांक विभाजन लागू कर सकते हैं , जैसे:
int a = 42;
int b = 23;
double result = (double)a / b;
पहले मामले में, आप पूर्णांक विभाजन कर रहे हैं, इसलिए परिणाम छोटा है (दशमलव भाग कटा हुआ है) और पूर्णांक वापस आ गया है।
दूसरे मामले में, पहले चींटियों को दशमलव में बदल दिया जाता है, और परिणाम एक दशमलव होता है। इसलिए उन्हें छोटा नहीं किया जाता है और आपको सही परिणाम मिलता है।
निम्नलिखित पंक्ति:
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
आप संख्याएँ डालना चाहते हैं:
double c = (double) a / (double) b;
नोट: यदि C # में कोई भी तर्क एक डबल है, तो एक डबल डिवाइड का उपयोग किया जाता है जिसके परिणामस्वरूप एक डबल होता है। तो, निम्नलिखित भी काम करेगा:
double c = (double) a / b;
यहाँ एक छोटा कार्यक्रम है:
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();
}
मेरे मामले में ऊपर कुछ भी काम नहीं किया।
मैं जो करना चाहता हूं, वह 278 को 575 से विभाजित करता है और प्रतिशत खोजने के लिए 100 से गुणा करता है।
double p = (double)((PeopleCount * 1.0 / AllPeopleCount * 1.0) * 100.0);
%: 48,3478260869565 -> 278/575 ---> 0%: 51,6521739130435 -> 297/575 ---> 0
अगर मैं 1.0 से PeopleCount को गुणा करता हूं तो यह दशमलव और डिवीजन 48.34 हो जाएगा ... यह भी 100.0 नहीं 100 से गुणा करें।
इस तरह के रूप में चिह्नित जवाब बहुत ही वहाँ है, लेकिन मुझे लगता है कि यह जोड़ने योग्य है कि दोहरे और दशमलव का उपयोग करने के बीच अंतर है।
मैं विकिपीडिया की तुलना में अवधारणाओं को समझाने वाला बेहतर काम नहीं करूंगा, इसलिए मैं केवल संकेत प्रदान करूंगा:
वित्तीय प्रणालियों में, यह अक्सर एक आवश्यकता होती है कि हम एक निश्चित संख्या में (आधार -10) दशमलव स्थानों की सटीकता की गारंटी दे सकते हैं। यह आम तौर पर असंभव है यदि इनपुट / स्रोत डेटा बेस -10 में है, लेकिन हम बेस -2 में अंकगणित करते हैं (क्योंकि किसी संख्या के दशमलव विस्तार के लिए आवश्यक दशमलव स्थानों की संख्या आधार पर निर्भर करती है; एक तिहाई असीम रूप से कई दशमलव लेता है; बेस -10 में 0.333333 ... के रूप में व्यक्त करने के लिए स्थान, लेकिन यह बेस -3: 0.1) में केवल एक दशमलव लेता है।
फ्लोटिंग-पॉइंट नंबर काम करने के लिए तेज़ हैं (सीपीयू समय के संदर्भ में, प्रोग्रामिंग-वार वे समान रूप से सरल हैं) और जब भी आप राउंडिंग त्रुटि को कम करना चाहते हैं (जैसा कि वैज्ञानिक अनुप्रयोगों में है)।