2013-02-08 12 views
32

सी # में, राउंडिंग गणित फ़ंक्शन, छत और छत का काम क्यों नहीं करता int? फ़ंक्शन के परिणाम को ध्यान में रखते हुए हमेशा एक पूर्णांक होगा, यह float, double या decimal क्यों लौटाता है?मैथ क्यों नहीं है। राउंड एक int वापस?

+1

दौर अधिभारित है, और वापसी प्रकारों को स्टार्टर्स के लिए मिलान करना पड़ता है; पी – leppie

+11

कल्पना कीजिए कि आप 'Math.Round (1E30)' कहते हैं और यह 'int' देता है, क्या होगा? –

+0

तो आप कह रहे हैं कि यह निर्धारित करने के लिए बीसीएल का काम है कि आप क्या परिणाम चाहते हैं? –

उत्तर

31

double has the range of ±5.0 × 10−324 to ±1.7 × 10308 और long has the range of –9,223,372,036,854,775,808 to 9,223,372,036,854,775,807। दुर्भाग्यवश सभी अभिन्न फ़्लोटिंग पॉइंट मानों को एक पूर्णांक द्वारा दर्शाया जा सकता है।

उदाहरण के लिए, 1e19 पहले ही 64-बिट हस्ताक्षरित पूर्णांक की सीमा से अधिक हो चुका है।

(long)Math.Round(1e19) == -9223372036854775808L // WTF? 

हालांकि यह सच एकल तर्क overloads कि Math.Round(double) और Math.Round(decimal) हमेशा एक अभिन्न मान प्रदान करेंगे, इन भार के अभी भी एक पूर्णांक मान प्रकार वापस नहीं लौट सकते।

यदि आप जानते हैं कि फ़ंक्शन पर दिए गए मान को एक पूर्णांक मान प्रकार द्वारा प्रतिनिधित्व योग्य मान वापस कर दिया जाएगा, तो आप इसे स्वयं कास्ट कर सकते हैं। लाइब्रेरी ऐसा नहीं करेगी क्योंकि इसे सामान्य मामले पर विचार करने की आवश्यकता है।

+3

नोट, हालांकि, लंबे पूर्णांक हैं जो * नहीं * युगल के रूप में प्रतिनिधित्व योग्य हैं: '(डबल) 100000000000000001L == 1e17' (और' 1e17 == 1e17 + 1')। –

+0

@ एंटाल्स-जेड हाँ। अधिक सटीकता के लिए, ['दशमलव'] (http://msdn.microsoft.com/en-us/library/364x0z75 (v = vs.80) .aspx का उपयोग करके) प्रकार बेहतर है। –

13

फ़ंक्शन के परिणाम को ध्यान में रखते हमेशा एक पूर्णांक हो जाएगा,

कोई यह नहीं होगा। वापसी मान में दशमलव अंक की संख्या
System.Int32
: तुम भी साथ Math.Round Method (Double, Int32)

अंक टाइप अंकों की संख्या निर्दिष्ट कर सकते हैं।

+2

+1 दरअसल, क्योंकि हर बार हमें int – V4Vendetta

+0

तक गोल करने की आवश्यकता नहीं होती है, इसलिए मैं मदद नहीं कर सकता लेकिन यहां गूंगा हूं, राउंड के लिए प्रलेखन कहता है "निकटतम पूर्णांक देता है" - और आप कह रहे हैं कि यह हमेशा नहीं होता एक पूर्णांक वापस करें। यह समझ में नहीं आता है। – PandaWood

+0

@ पांडावुड, आप कहां देखते हैं "निकटतम पूर्णांक देता है"?मुझे यह नहीं मिला, क्या आप लिंक साझा कर सकते हैं। यदि आप इस निकटतम पूर्णांक का जिक्र कर रहे हैं। यदि दो पूर्णांक के बीच आधे रास्ते का आंशिक घटक आधा है, जिसमें से एक भी है और दूसरा विषम है, तो यहां तक ​​कि संख्या भी वापस आती है। ध्यान दें कि यह विधि एक अभिन्न प्रकार के बजाय डबल लौटाती है। फिर अंतिम भाग को नोट करें। – Habib

2

यह एक int की सीमा में शामिल किए गए संख्याओं से अधिक संख्याओं को शामिल करने के लिए किया जाता है। तो गणित। फ्लोर एक डबल लौटाएगा जिसे आकार और डेवलपर के आधार पर int या लंबे समय तक जाया जा सकता है। यदि आपने मैथ की आवश्यकता के बाहर Math.Floor की कोशिश की है, तो यह विफल हो गया होगा अगर मैथ.फ्लूर ने एक int वापस कर दिया, लेकिन ऐसा नहीं होता है, यह एक डबल देता है जिसे आप लंबे समय तक डाल सकते हैं।

 double d = 4147483647.5678; 
    long a = (long)Math.Floor(d); 
    int b = (int)Math.Floor(d); 
    Console.WriteLine(a); 
    Console.WriteLine(b); 

ध्यान दें कि int को कास्टिंग पर, बी को वापस MIN int पर धकेल दिया गया था, क्योंकि int इसे समायोजित नहीं कर सकता है।

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