2012-11-23 36 views
17

में 2 दशमलव स्थानों तक गोल करना मैं दो दशमलव को गुणा कैसे कर सकता हूं और परिणाम को 2 दशमलव स्थानों तक कैसे चला सकता हूं?सी #

उदाहरण के लिए यदि समीकरण 41.75 x 0.1 है तो परिणाम 4.175 होगा। यदि मैं इसे सी # में decimals के साथ करता हूं तो यह स्वचालित रूप से 4.18 तक पहुंच जाएगा। मैं 4.17 तक गोल करना चाहता हूं।

मैंने Math.Floor का उपयोग करने का प्रयास किया लेकिन यह सिर्फ 4.00 तक चला गया। यहाँ एक उदाहरण है:

Math.Floor (41.75 * 0.1); 
+0

आप 'Math.Round' की कोशिश की है: वह कुछ इस तरह होना चाहिए? – nhahtdh

+2

यदि आप गोलाकार करना चाहते हैं तो आप Math.Round के अधिभार का उपयोग कर सकते हैं जो मध्य बिंदु को नियंत्रित करने के तरीके को नियंत्रित करता है। यदि आप हर समय फर्श चाहते हैं, तो 100, फर्श से गुणा करने पर विचार करें, फिर 100 से विभाजित करें। – John

+0

क्या आप 4.176 और उससे ऊपर के लिए मानक गोलाकार चाहते हैं? –

उत्तर

28

Math.Round(...) समारोह एक Enum यह बताने के लिए कि राउंडिंग रणनीति का उपयोग करना पड़ता है। दुर्भाग्य से दो परिभाषित आपकी स्थिति ठीक से फिट नहीं होंगे।

दो मध्यबिंदु गोलाई मोड हैं:

  1. AwayFromZero - जब एक नंबर दो अन्य लोगों के बीच आधे रास्ते है, यह निकटतम संख्या शून्य से दूर है कि की ओर गोल है। (उर्फ, राउंड अप)
  2. ToEven - जब कोई संख्या दो अन्य लोगों के बीच आधा रास्ते है, तो यह निकटतम संख्या की ओर घिरा हुआ है। (.17 से अधिक .17 से अधिक .16, और .18 के पक्ष में होगा)

क्या आप उपयोग करना चाहते कुछ गुणा साथ Floor है।

var output = Math.Floor((41.75 * 0.1) * 100)/100; 

output चर उस में 4.17 अब होना चाहिए।

वास्तव में तुम भी साथ ही साथ एक चर लंबाई लेने के लिए एक समारोह लिख सकते हैं:

public decimal RoundDown(decimal i, double decimalPlaces) 
{ 
    var power = Convert.ToDecimal(Math.Pow(10, decimalPlaces)); 
    return Math.Floor(i * power)/power; 
} 
+1

वास्तव में है, इसे 'Math.Round विधि (दशमलव, Int32, MidpointRounding)' अधिभार का उपयोग करना चाहिए (http://stackoverflow.com/questions/13522095/rounding-down- टू-2-दशमलव-स्थानों-इन-सी-तेज) –

+0

i * शक्ति एक त्रुटि है। आपका मतलब डबल हो सकता है। –

+0

आप दशमलव के साथ एक डबल गुणा नहीं कर सकते हैं – Ruan

5

परिशुद्धता मंजिल/सी # में ceillin के लिए कोई देशी समर्थन नहीं है।

हालांकि आप संख्या, मंजिल को गुणा करके कार्यक्षमता की नकल कर सकते हैं और फिर उसी गुणक द्वारा विभाजित कर सकते हैं। यदि संख्या छोटा है

जैसे,

decimal y = 4.314M; 
decimal x = Math.Floor(y * 100)/100; // To two decimal places (use 1000 for 3 etc) 
Console.WriteLine(x); // 4.31 

नहीं आदर्श समाधान है, लेकिन काम करना चाहिए।

1

एक और समाधान शून्य से घूमने से शून्य की ओर गोल करने के लिए है।

static decimal DecimalTowardZero(decimal value, int decimals) 
    { 
     // rounding away from zero 
     var rounded = decimal.Round(value, decimals, MidpointRounding.AwayFromZero); 

     // if the absolute rounded result is greater 
     // than the absolute source number we need to correct result 
     if (Math.Abs(rounded) > Math.Abs(value)) 
     { 
      return rounded - new decimal(1, 0, 0, value < 0, (byte)decimals); 
     } 
     else 
     { 
      return rounded; 
     } 
    } 
9
public double RoundDown(double number, int decimalPlaces) 
{ 
    return Math.Floor(number * Math.Pow(10, decimalPlaces))/Math.Pow(10, decimalPlaces); 
}