2011-03-21 18 views

उत्तर

14

Decimal.Multiply का उपयोग करके गुणा को decimal के प्रकार का उपयोग करने के लिए मजबूर किया जाएगा जो कि उपयोग किए जा रहे प्रकार के 0xमें परिवर्तित हो गया है।

Decimal.Multiply(decimal d1, decimal d2) और decimal प्रकार का प्रवर्तन और आउटपुट लागू करेगा। * के रूप में आप कर सकता है कहां:

decimal result = yourDecimal * yourInt; 

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

+0

अच्छा बिंदु। क्रिस के रूप में सिर्फ एक पठनीयता समस्या से कहीं अधिक, गुणा करने के लिए एक प्रकार का सुरक्षित तरीका भी इंगित करता है। अच्छा! –

+1

मुझे यकीन नहीं है कि आप क्या कहने की कोशिश कर रहे हैं। गुणा होने से पहले 'int' मान को निश्चित रूप से' दशमलव' में परिवर्तित कर दिया जाता है ताकि आप किसी भी मामले में दशमलव अंकगणित कर रहे हों। यदि आप दो 'int' मानों को गुणा कर रहे थे तो दशमलव को असाइन करना एक समस्या हो सकती है, लेकिन आप' मल्टीप्ली 'विधि का उपयोग किए बिना पहले को दशमलव पर कास्ट करके प्राप्त कर सकते हैं। – tvanfosson

+0

मुझे लगता है कि आप इसे सही ढंग से समझते हैं लेकिन आपका उदाहरण यह सुझाव देता है कि आपको 'दशमलव' करने के लिए अनुमति नहीं है। बहुमत (आपका डेसीमल, yourInt) ', जो आप निश्चित रूप से हैं - int से दशमलव तक एक अंतर्निहित रूपांतरण है। केवल दशमलव के साथ। बहुमत, आप सुनिश्चित कर सकते हैं कि _decimal_ गुणा का उपयोग किया जाता है, जो महत्वपूर्ण हो सकता है उदा। 'int i1 = 1000000; दशमलव x = i1 * i1; 'बनाम दशमलव x = decimal.Multiply (i1, i1);' – Mormegil

11

* ऑपरेटर अतिभारित और आंतरिक रूप से Multiply कॉल कर रहा है। यह वास्तव में सिर्फ पठनीयता की बात है।

+0

क्या आपने माना है कि 'दशमलव परिणाम = int.MaxValue * 2;' के साथ क्या होता है? – mgronber

+2

@mgronber - यह 'मल्टीप्लाई' का उपयोग करने का कोई कारण नहीं है, यह ऑपरेशन के लिए सही प्रकार का उपयोग करके पूर्णांक ओवरफ़्लो को समझने का एक कारण है, और टाइपकास्टिंग/प्रचार। यदि आप किसी ऐसे मामले में 'मल्टीप्लाई' को कॉल करने का प्रयास करते हैं तो उसे करने के लिए सही बात यह है कि उन्हें नीचे बैठना और संख्यात्मक प्रतिनिधित्व के बारे में चर्चा करना और सही प्रकार का चयन करना (कास्टिंग करना) है। कड़ाई से बोलते हुए, इस सवाल को किस तरह से कहा जाता है, यह वास्तव में कोई जवाब नहीं है - कम से कम मेरे लिए '100 * 200' बहुत अधिक पठनीय है, हालांकि मैं इसे '100 मीटर * 200 मीटर' के साथ संगत होने के लिए लिखूंगा प्रकार – tvanfosson

+0

आह हाँ, ठीक है, मुझे लगता है कि उस मामले में आरएचएस का पूर्णांक (जो ओवरफ्लो होगा) के रूप में मूल्यांकन किया जाएगा, जबकि दशमलव। बहुउद्देशीय समाधान अधिक नहीं होगा। तो '*' ऑपरेटर के साथ इसे कॉल करने का सही तरीका '(दशमलव) int है। मैक्सवेल्यू * (दशमलव) 2'। –

4

कुछ भाषाएं अधिभारित ऑपरेटरों का समर्थन नहीं करती हैं; उनको गुणा() विधि को कॉल करना होगा।

1

किसी भी भाषा में सीधे दशमलव का समर्थन करने के लिए .NET भाषा की आवश्यकता नहीं है, लेकिन ऐसी भाषा में आप अभी भी सिस्टम का उपयोग कर सकते हैं। डेसिमल स्ट्रक्चर। चूंकि कोई भी आवश्यकता नहीं है कि एक .NET भाषा समर्थन ऑपरेटर ओवरराइड करता है, इस तरह के मामले में पूर्ण उपयोग की अनुमति देने के लिए विधियों की आवश्यकता होती है।

+0

@Eric, प्रबंधित सी ++ सीएलएस अनुपालन नहीं है, या क्या मुझे यह सोचने में गलत याद है कि इसका दशमलव के लिए कोई प्रत्यक्ष समर्थन नहीं है। या यह मामला है कि यह ऑपरेटर ओवरलोड के माध्यम से अनुपालन करता है और ऑपरेटर ओवरलोडिंग के बिना एक भाषा को अभी भी ऑपरेटर को दशमलव पर समर्थन देना होगा? –

+1

यह एक अच्छा सवाल है। मैं सीएलएस स्पेक का वकील नहीं हूं - जो चश्मा के रूप में अस्पष्ट है - और मैं किसी भी माध्यम से सी ++/सीएलआई पर एक विशेषज्ञ नहीं हूं, इसलिए मैं अनुमान लगाने का जोखिम नहीं उठा रहा हूं। –

8

* ऑपरेटर दशमलव प्रकारों के लिए अधिभारित है और यह Decimal.Multiply() के समान है। हालांकि, अधिभारित * ऑपरेटर के लिए आवश्यक है कि कम से कम एक पैरामीटर दशमलव है। अन्यथा, कुछ अन्य * ऑपरेटर कहा जाता है। decimal result = 100 * 200 में int प्रकारों को पहले गुणा किया जाता है और फिर दशमलव में परिवर्तित किया जाता है। यदि गुणा परिणाम Int32.MaxValue से बड़ा है, तो आपको ओवरफ़्लो मिलेगा।

decimal d1 = 2147483647 * 2; // Overflow 
decimal d2 = 2147483647m * 2; // OK 
decimal d3 = Decimal.Multiply(2147483647, 2); // OK 
संबंधित मुद्दे