web-dev-qa-db-fra.com

Arrondir une variable à deux décimales C #

Duplicate possible:
Comment arrondir un nombre à deux décimales en C #?

Je suis intéressé par la façon d'arrondir les variables à deux décimales. Dans l'exemple ci-dessous, le bonus est généralement un nombre avec quatre décimales. Existe-t-il un moyen de s’assurer que la variable de rémunération est toujours arrondie à deux décimales?

      pay = 200 + bonus;
      Console.WriteLine(pay);
42
Kerry G

Utilisez Math.Round et spécifiez le nombre de décimales.

Math.Round(pay,2);

Méthode Math.Round (Double, Int32)

Arrondit une valeur à virgule flottante double précision à un nombre spécifié de chiffres fractionnaires.

Ou Méthode Math.Round (Decimal, Int32)

Arrondit une valeur décimale à un nombre spécifié de chiffres fractionnaires.

82
Habib

Vous devriez utiliser une forme de Math.Round . Sachez que, par défaut, Math.Round Est arrondi par le banquier (arrondi au nombre pair le plus proche) à moins que vous ne spécifiez une valeur MidpointRounding . Si vous ne souhaitez pas utiliser l'arrondissement bancaire, vous devez utiliser Math.Round(decimal d, int decimals, MidpointRounding mode) , comme suit:

Math.Round(pay, 2, MidpointRounding.AwayFromZero); // .005 rounds up to 0.01
Math.Round(pay, 2, MidpointRounding.ToEven);       // .005 rounds to nearest even (0.00) 
Math.Round(pay, 2);    // Defaults to MidpointRounding.ToEven

( Pourquoi .Net utilise-t-il l'arrondissement bancaire? )

25
Jon Senchyna
decimal pay  = 1.994444M;

Math.Round(pay , 2); 
5
Aghilas Yakoub

Vous pouvez arrondir le résultat et utiliser string.Format pour régler la précision comme ceci:

decimal pay = 200.5555m;
pay = Math.Round(pay + bonus, 2);
string payAsString = string.Format("{0:0.00}", pay);
4
Paul Aldred-Bann

Utilisez System.Math.Round pour arrondir une valeur décimale à un nombre spécifié de chiffres fractionnaires.

var pay = 200 + bonus;
pay = System.Math.Round(pay, 2);
Console.WriteLine(pay);

Références MSDN:

2
Furqan Safdar

Assurez-vous de fournir un numéro, généralement un double est utilisé. Math.Round peut prendre 1 à 3 arguments. Le premier argument est la variable que vous souhaitez arrondir, le second le nombre de décimales et le troisième le type d'arrondi.

double pay = 200 + bonus;
double pay = Math.Round(pay);
// Rounds to nearest even number, rounding 0.5 will round "down" to zero because zero is even
double pay = Math.Round(pay, 2, MidpointRounding.ToEven);
// Rounds up to nearest number
double pay = Math.Round(pay, 2, MidpointRounding.AwayFromZero);
2
Sean

Faites attention au fait que Roundrounds.

Donc (je ne sais pas si cela compte dans votre secteur d'activité ou pas), mais:

float a = 12.345f;
Math.Round(a,2);

//result:12,35, and NOT 12.34 !

Pour le rendre plus précis pour votre cas , nous pouvons faire quelque chose comme ceci:

int aInt = (int)(a*100);
float aFloat= aInt /100.0f;
//result:12,34 
2
Tigran
Console.WriteLine(decimal.Round(pay,2));
1
Jakub Szułakiewicz