प्रलेखन के अनुसार, decimal.Round
विधि एक गोल-से-समरूप एल्गोरिथ्म का उपयोग करती है जो अधिकांश अनुप्रयोगों के लिए सामान्य नहीं है। इसलिए मैं हमेशा अधिक प्राकृतिक राउंड-अप-अप एल्गोरिथ्म करने के लिए एक कस्टम फ़ंक्शन लिखना समाप्त करता हूं:
public static decimal RoundHalfUp(this decimal d, int decimals)
{
if (decimals < 0)
{
throw new ArgumentException("The decimals must be non-negative",
"decimals");
}
decimal multiplier = (decimal)Math.Pow(10, decimals);
decimal number = d * multiplier;
if (decimal.Truncate(number) < number)
{
number += 0.5m;
}
return decimal.Round(number) / multiplier;
}
किसी को भी इस रूपरेखा डिजाइन निर्णय के पीछे का कारण पता है?
क्या ढांचे में राउंड-हाफ-अप एल्गोरिथम का कोई अंतर्निहित कार्यान्वयन है? या शायद कुछ अप्रबंधित विंडोज एपीआई?
यह शुरुआती लोगों के लिए भ्रामक हो सकता है जो केवल decimal.Round(2.5m, 0)
3 परिणाम के रूप में अपेक्षा करते हैं लेकिन इसके बजाय 2 प्राप्त करते हैं।