2010-09-26 13 views
9

यह आसान होना चाहिए, लेकिन मुझे विधि में निर्मित नहीं किया जा सकता है, नेट फ्रेमवर्क में ऐसा करने का एक तरीका होना चाहिए!मैं .Net में दशमलव से 2 दशमलव स्थानों को कैसे गोल करूं?

private decimal RoundDownTo2DecimalPlaces(decimal input) 
{ 
    if (input < 0) 
    { 
     throw new Exception("not tested with negitive numbers"); 
    } 

    // There must be a better way! 
    return Math.Truncate(input * 100)/100; 
} 
+0

क्या आप दशमलव को स्वयं या एक टेक्स्ट प्रस्तुति को गोल करना चाहते हैं? –

+0

@ हेनक, मुझे मूल्य को टेक्स्ट के रूप में आउटपुट करने की आवश्यकता है, लेकिन आउटपुट से पहले गोलाकार करना होगा। यह पसंद है कि मूल्य को बाद में अन्य कैल्क्स में खिलाना होगा। –

+0

संभावित डुप्लिकेट [दशमलव बिंदु के बाद दो से 2 महत्वपूर्ण आंकड़े गोल करें] (http: // stackoverflow।कॉम/प्रश्न/2808535/राउंड-ए-डबल-टू-2-महत्वपूर्ण-आंकड़े-दशमलव-बिंदु-बाद-बिंदु) – ecatmur

उत्तर

0

ऐसा करने के लिए .NET ढांचे में कोई विधि नहीं है, अन्य उत्तरों का कहना है कि अपना कोड कैसे लिखें।

2
Math.Floor(number * 100)/100; 
+0

मक्खन तो मेरा समाधान, गणित के रूप में। फ्लोर नकारात्मक संख्याओं के साथ सही परिणाम देते हैं। http://stackoverflow.com/questions/14/whats-the-difference-between-math-floor-and-math-truncate-in-net –

3

उपयोग .Truncate() सटीक राशि प्राप्त करने के लिए, या .Round() दौर के लिए।

decimal dNum = (decimal)165.6598F; 
decimal dTruncated = (decimal)(Math.Truncate((double)dNum*100.0)/100.0); //Will give 165.65 
decimal dRounded = (decimal)(Math.Round((double)dNum, 2)); //Will give 165.66 

या आप एक विस्तार विधि की तरह dNum.ToTwoDecimalPlaces();

public static class Extensions 
{ 
    public static decimal ToTwoDecimalPlaces(this decimal dNum) 
    { 
     return ((decimal)(Math.Truncate((double)dNum*100.0)/100.0)); 
    } 
} 
15

इसे चलाने के लिए कर सकते हैं आप नीचे गोलाई रहे हैं तो आप की जरूरत:

Math.Floor(number * 100)/100; 

आप देख रहे हैं कुछ के लिए जिसे 'बैंकर राउंडिंग' कहा जाता है (शायद यह आउटपुट के लिए नहीं है और आंकड़ों/संक्षेपों के लिए नहीं) तो:

Math.Round(number, 2); 

अंत में अगर आप चाहते हैं, यकीन नहीं क्या सही शब्द, 'सामान्य राउंडिंग' है:

Math.Round(number, 2, MidpointRounding.AwayFromZero); 
+0

नीचे मेरी प्रतिक्रिया देखें: MidpointRounding.AwayFromZero या MidpointRounding.ToEven निर्दिष्ट करें कि कैसे '5' के साथ समाप्त होने वाली संख्याओं को संभालने के लिए: MidpointRounding.ToEven निर्दिष्ट करें कि 1.135 1.13 के लिए गोल होना चाहिए, और 1.145 से 1.15 मिडपॉइंट राउंडिंग .AwayFromZero निर्दिष्ट करें कि 1.135 1.14 के लिए गोल होना चाहिए, और 1.145 से 1.15 –

5

उपयोग Math.Floor अगर आप आप एक प्राप्त करना चाहते हैं, तो था मूल्य, या Math.Round नीचे पूर्णांक बनाना चाहते हैं सटीक दौर Math.Truncate बस संख्या का दशमलव हिस्से को हटाने, तो आप ऋणात्मक संख्याओं के लिए बुरा परिणाम प्राप्त:

var result= Math.Floor(number * 100)/100; 

Math.Floor हमेशा सबसे छोटी अभिन्न मूल्य है कि कम (तल) या अधिक से अधिक (छत) की तुलना में वापसी निर्दिष्ट मूल्य तो आपको सही गोल नहीं मिलता है। उदाहरण:

Math.Floor(1.127 * 100)/100 == 1.12 //should be 1.13 for an exact round 
Math.Ceiling(1.121 * 100)/100 == 1.13 //should be 1.12 for an exact round 

हमेशा गणित के संस्करण को प्राथमिकता दें। राउंड मध्य-बिंदु राउंडिंग पैराम युक्त है। यह पैराम बताता है कि मध्य बिंदु मान (5) को अंतिम अंक के रूप में कैसे संभालना है।

यदि आप पैरा के लिए मूल्य के रूप में AwayFromZero निर्दिष्ट नहीं करते हैं, तो आपको डिफ़ॉल्ट व्यवहार मिलेगा, जो ToEven है। उदाहरण के लिए, ToEven का उपयोग कर विधि गोलाई के रूप में, आपको मिलता है:

Math.Round(2.025,2)==2.02 
Math.Round(2.035,2)==2.04 

बजाय, MidPoint.AwayFromZero परम का उपयोग कर:

Math.Round(2.025,2,MidpointRounding.AwayFromZero)==2.03 
Math.Round(2.035,2,MidpointRounding.AwayFromZero)==2.04 

तो, एक सामान्य राउंडिंग के लिए, यह इस कोड का उपयोग करने के लिए सबसे अच्छा है:

var value=2.346; 
var result = Math.Round(value, 2, MidpointRounding.AwayFromZero); 
+0

क्या आपने quesion पढ़ा मैंने कहा "गोल नीचे" –

+0

क्षमा करें, मेरी माफ़ी ... –

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