प्रलेखन के अनुसार, 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 प्राप्त करते हैं।