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);
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.
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
decimal pay = 1.994444M;
Math.Round(pay , 2);
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);
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:
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);
Faites attention au fait que Round
rounds.
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
Console.WriteLine(decimal.Round(pay,2));