Pourquoi les Mathématiques.Round(2.5) retour 2 au lieu de 3?

En C#, le résultat de Math.Round(2.5) est 2.

Il est censé être 3, n'est-ce pas? Pourquoi est-il 2 plutôt en C#?

C'est en fait une fonctionnalité. Voir <a href="" >msdn.microsoft.com/en-us/library/... la documentation MSDN</a>. Ce genre de arrondissement est connu comme l'arrondi. Comme pour une solution de contournement, il est <a href="" >msdn.microsoft.com/en-us/library/... la surcharge</a> qui permet à l'appelant de spécifier la façon de faire les arrondis.
Apparemment, le tour de méthode, lorsqu'on a demandé à arrondir un nombre exactement entre deux entiers, renvoie le nombre entier pair. Ainsi, Les Maths.Round(3.5) renvoie 4. Voir cet article
Math.Round(2.5, 0, MidpointRounding.AwayFromZero);
SQL Server tours de cette façon; les résultats de l'épreuve intéressants quand il y a un C# test de l'unité ti valider l'arrondissement fait en T-SQL.
ce n'est pas un bug. C'est la façon variable binaire points. 1.005 ne peuvent pas être représentés exactement en double. C'est probablement 1.00499.... Si vous utilisez Decimal ce problème disparaîtra. L'existence des Mathématiques.Tour de surcharge qui prend un certain nombre de chiffres après la virgule sur le double est douteuse choix de conception de l'OMI, depuis qu'il est rarement travaillent dans une manière significative.

OriginalL'auteur jeffu | 2009-06-10