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

je veux le faire en utilisant la fonction Math.Round 151920920"

295
demandé sur Rex M 2008-11-02 19:07:46

13 réponses

voici quelques exemples:

decimal a = 1.994444M;

Math.Round(a, 2); //returns 1.99

decimal b = 1.995555M;

Math.Round(b, 2); //returns 2.00

vous pourriez aussi vouloir regarder les banquiers arrondissant / rond-à-même avec la surcharge suivante:

Math.Round(a, 2, MidpointRounding.ToEven);

Il ya plus d'informations sur elle ici .

505
répondu Eoin Campbell 2018-07-23 18:39:59

essayez ceci:

twoDec = Math.Round(val, 2)
74
répondu John Boker 2011-03-24 12:22:26

personnellement, je n'arrondis jamais rien. Gardez-le aussi résolu que possible, puisque l'arrondissement est un peu un hareng rouge dans CS de toute façon. Mais vous voulez formater des données pour vos utilisateurs, et à cette fin, je trouve que string.Format("{0:0.00}", number) est une bonne approche.

33
répondu Gleno 2012-02-23 02:01:55

si vous voulez une corde

> (1.7289).ToString("#.##")
"1.73"

ou une décimale

> Math.Round((Decimal)x, 2)
1.73m

mais rappelez-vous! L'arrondi n'est pas distributive, c'est à dire. round(x*y) != round(x) * round(y) . Donc, ne faites aucun arrondi jusqu'à la fin d'un calcul, sinon vous perdrez la précision.

25
répondu Colonel Panic 2015-06-15 12:13:19

Wikipedia a une belle page sur l'arrondissement en général.

toutes les langues .NET (gérées) peuvent utiliser n'importe lequel des mécanismes d'arrondi de common language run time (CLR). Par exemple, le Math.Round () (comme mentionné ci-dessus) la méthode permet au développeur de spécifier le type d'arrondi (rond-à-pair ou loin-de-zéro). converti.La méthode ToInt32() et ses variantes utilisent round-to-pair . Le Les méthodes Plafond () et plancher () sont liées.

vous pouvez arrondir avec format numérique personnalisé ainsi.

noter que décimal.Round () utilise une méthode différente des mathématiques.Round ();

voici un POS utile t sur l'algorithme d'arrondissement du banquier. Voir L'un des billets humoristiques de Raymond ici à propos de l'arrondissement...

12
répondu Foredecker 2008-11-02 16:27:31

// convertir jusqu'à deux décimales

String.Format("{0:0.00}", 140.6767554);        // "140.67"
String.Format("{0:0.00}", 140.1);             // "140.10"
String.Format("{0:0.00}", 140);              // "140.00"

Double d = 140.6767554;
Double dc = Math.Round((Double)d, 2);       //  140.67

decimal d = 140.6767554M;
decimal dc = Math.Round(d, 2);             //  140.67

=========

// just two decimal places
String.Format("{0:0.##}", 123.4567);      // "123.46"
String.Format("{0:0.##}", 123.4);         // "123.4"
String.Format("{0:0.##}", 123.0);         // "123"

peut aussi combiner" 0 "avec"#".

String.Format("{0:0.0#}", 123.4567)       // "123.46"
String.Format("{0:0.0#}", 123.4)          // "123.4"
String.Format("{0:0.0#}", 123.0)          // "123.0"
10
répondu Rae Lee 2016-01-15 09:20:49

je sais que c'est une vieille question, mais s'il vous plaît noter pour les différences suivantes entre math round et String format round :

decimal d1 = (decimal)1.125;
Math.Round(d1, 2).Dump();   // returns 1.12
d1.ToString("#.##").Dump(); // returns "1.13"

decimal d2 = (decimal)1.1251;
Math.Round(d2, 2).Dump();   // returns 1.13
d2.ToString("#.##").Dump(); // returns "1.13"
6
répondu Guy 2017-11-02 09:12:24

pour arrondir à 2 décimales en C#:

label8.Text = valor_cuota .ToString("N2") ;

In VB.NET:

 Imports System.Math
 round(label8.text,2)
5
répondu sadim 2012-02-23 01:42:58

une chose que vous pourriez vouloir vérifier est le mécanisme D'arrondi de mathématiques.Rond:

http://msdn.microsoft.com/en-us/library/system.midpointrounding.aspx

à part ça, je recommande les maths.Rond (inputNumer, numberOfPlaces) approche sur le *100/100 un parce qu'il est plus propre.

4
répondu Michael Stum 2008-11-02 16:15:44

Vous devriez être en mesure de préciser le nombre de chiffres que vous voulez arrondir à l'aide des Mathématiques.Round (YourNumber, 2)

vous pouvez lire la suite ici .

3
répondu Kevin W Lee 2008-11-02 16:15:00

chaîne a = "10.65678";

décimal D = Math.Round(Convertir.ToDouble(A. ToString ()), 2)

1
répondu Abhishek Jaiswal 2015-11-27 06:33:34
  public double RoundDown(double number, int decimalPlaces)
        {
            return Math.Floor(number * Math.Pow(10, decimalPlaces)) / Math.Pow(10, decimalPlaces);
        }
0
répondu Ruan 2017-06-28 08:53:18

"151910920 des Mathématiques".Plancher (123456.646 * 100) / 100 Retournerait 123456.64

0
répondu user3405179 2017-09-30 10:52:38