Utilisez Math.Floor si vous voulez arrondir tha valeur ou Math.Round si vous voulez obtenir un tour exact. Math.Truncate supprimer simplement la partie décimale du nombre, de sorte que vous obtenez de mauvais résultats pour les nombres négatifs:
var result= Math.Floor(number * 100)/100;
Math.Floor retourne toujours la plus petite valeur intégrale qui est moindre (au sol) ou supérieur (plafond) que la valeur spécifiée. Donc, vous n'obtenez pas un arrondi correct. Exemple:
Math.Floor(1.127 * 100)/100 == 1.12 //should be 1.13 for an exact round
Math.Ceiling(1.121 * 100)/100 == 1.13 //should be 1.12 for an exact round
Toujours préférer la version de Math.Round contenant le paramètre d'arrondi à mi-point. Ce paramètre spécifie comment gérer les valeurs médianes (5) en tant que dernier chiffre.
Si vous ne spécifiez pas AwayFromZero comme valeur pour param, vous obtiendrez le comportement par défaut, ToEven. Par exemple, en utilisant Toeven comme méthode d'arrondi, vous obtenez:
Math.Round(2.025,2)==2.02
Math.Round(2.035,2)==2.04
à la place, à l'aide MidPoint.AwayFromZero param:
Math.Round(2.025,2,MidpointRounding.AwayFromZero)==2.03
Math.Round(2.035,2,MidpointRounding.AwayFromZero)==2.04
Ainsi, pour un arrondissement normal, il est préférable d'utiliser ce code:
var value=2.346;
var result = Math.Round(value, 2, MidpointRounding.AwayFromZero);
Voulez-vous arrondir la décimale elle-même ou une représentation de texte? –
@Henk, j'ai besoin de sortir la valeur sous forme de texte, mais je préfère faire l'arrondi avant la sortie. C'est probablement la valeur devra nourrir dans d'autres calcs plus tard. –
duplication possible de [Arrondir un double à 2 chiffres significatifs après le point décimal] (http: // stackoverflow.com/questions/2808535/round-a-double-to-2-significatif-figures-after-decimal-point) – ecatmur