Dokümantasyona göre, decimal.Round
yöntem çoğu uygulama için yaygın olmayan bir yuvarlama algoritması kullanır. Bu yüzden her zaman daha doğal yuvarlak yarım yukarı algoritma yapmak için özel bir işlev yazıyorum:
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;
}
Bu çerçeve tasarımı kararının ardındaki nedeni bilen var mı?
Yuvarlama yarım algoritmanın çerçeveye yerleşik bir uygulaması var mı? Veya yönetilmeyen bir Windows API'sı olabilir mi?
Yeni başlayanlar için decimal.Round(2.5m, 0)
bir sonuç olarak 3 beklentisini yazıp bunun yerine 2 elde etmek yanıltıcı olabilir .