Duplicata possible:
c # - Comment arrondir une valeur décimale à 2 décimales (pour la sortie sur une page)Je veux tronquer les décimales comme ci-dessous
c'est à dire
- 2.22939393 -> 2.229
- 2.22977777 -> 2.229
- Comment afficher une valeur décimale à 2 décimales ? (5 réponses )
Réponses
Trop de publicités?Vous pouvez utiliser Math.Round :
decimal rounded = Math.Round(2.22939393, 3); //Returns 2.229
Ou vous pouvez utiliser ToString avec le format numérique N3.
string roundedNumber = number.ToString("N3");
EDIT: Puisque vous ne voulez pas d'arrondi, vous pouvez facilement utiliser Math.Truncate :
Math.Truncate(2.22977777 * 1000) / 1000; //Returns 2.229
double d = 2.22977777;
d = ( (double) ( (int) (d * 1000.0) ) ) / 1000.0 ;
Bien sûr, cela ne fonctionnera pas si vous essayez de tronquer l'erreur d'arrondi, mais cela devrait fonctionner correctement avec les valeurs que vous donnez dans vos exemples. Consultez les deux premières réponses à cette question pour savoir pourquoi cela ne fonctionne pas parfois.
Voici une méthode d'extension qui ne souffre pas d'un débordement d'entier (comme le font certaines des réponses ci-dessus). Il met également en cache certains pouvoirs de 10 pour plus d'efficacité.
static double[] pow10 = { 1e0, 1e1, 1e2, 1e3, 1e4, 1e5, 1e6, 1e7, 1e8, 1e9, 1e10 };
public static double Truncate(this double x, int precision)
{
if (precision < 0)
throw new ArgumentException();
if (precision == 0)
return Math.Truncate(x);
double m = precision >= pow10.Length ? Math.Pow(10, precision) : pow10[precision];
return Math.Truncate(x * m) / m;
}
Ceci est similaire à la suggestion TcK ci-dessus, mais en utilisant math.truncate plutôt que des conversions int
VB: mais vous aurez l'idée
Private Function TruncateToDecimalPlace(byval ToTruncate as decimal, byval DecimalPlaces as integer) as double
dim power as decimal = Math.Pow(10, decimalplaces)
return math.truncate(totruncate * power) / power
end function