Selon la documentation, l' decimal.Round
méthode utilise un rond-de-même algorithme qui n'est pas commun pour la plupart des applications. Donc, je finis toujours par écrire une fonction personnalisée pour faire le choix le plus naturel ronde demi-jusqu'algorithme:
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;
}
Quelqu'un sait la raison derrière cette conception du cadre de décision?
Est-il intégré dans la mise en œuvre de la ronde demi-jusqu'algorithme dans le cadre? Ou peut-être que certains non géré API Windows?
Il pourrait être trompeur pour les débutants que simplement écrire decimal.Round(2.5m, 0)
attend 3 comme un résultat, mais avoir 2 à la place.