2008-11-02 10 views

Répondre

69

Essayez ceci:

twoDec = Math.Round(val, 2) 
468

Voici un exemple:

decimal a = 1.994444M; 

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

decimal b = 1.995555M; 

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

Vous pouvez également regarder les banquiers d'arrondi/tour-to même avec la surcharge suivante:

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

Il y a plus d'informations à ce sujet here.

+40

Vous devriez rify que MidPointRounding.ToEven est la valeur par défaut. Si vous vouliez AwayFromZero vous devriez utiliser la surcharge –

+4

Je pense que MidPointRounding.ToEven est la valeur par défaut ... – Pedro77

+2

Je pense que cela devrait être: 'MidpointRounding' pas' MidPointRounding' au cas où quelqu'un se demanderait pourquoi il ne compile pas. –

3

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

Vous pouvez en lire plus here.

12

Wikipedia has a nice page en arrondissant en général.

Toutes les langues .NET (gérées) peuvent utiliser n'importe lequel des mécanismes d'arrondi de CLR (common language run time). Par exemple, la méthode Math.Round() (comme mentionné ci-dessus) permet au développeur de spécifier le type d'arrondi (Round-to-pair ou Away-from-zero). La méthode Convert.ToInt32() et ses variantes utilisent round-to-even. Les méthodes Ceiling() et Floor() sont liées. Vous pouvez également arrondir avec custom numeric formatting. Remarque: Decimal.Round() utilise une méthode différente de Math.Round();

Voici un useful pos t sur l'algorithme d'arrondi du banquier. Voir un de Raymond de posts here humoristique sur l'arrondissement ...

5

Ceci est pour arrondir à 2 décimales en C#:

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

En VB.NET:

Imports System.Math 
round(label8.text,2) 
31

Personnellement, je ne rondes n'importe quoi. Gardez-le aussi résolument que possible, puisque arrondir est un peu un hareng rouge dans CS de toute façon. Mais vous voulez formater les données pour vos utilisateurs, et à cette fin, je trouve que string.Format("{0:0.00}", number) est une bonne approche.

+0

Cela fonctionne mieux à des fins d'affichage, en particulier pour l'argent, comme £ 5,4 (avec Math.round) ne semble pas aussi bien que £ 5,40 (de cette façon). –

+0

J'ai essayé avant string.Format ("0: 0.00", nombre), mais cela n'a pas fonctionné. Ces crochets sont très importants, donc: string.Format ("{0: 0.00}", number) fonctionne. – FrenkyB

+4

@FrenkyB Quand vous dites «crochets», j'espère que vous voulez dire des accolades. – Mathemats

22

Si vous souhaitez une chaîne

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

Ou un nombre décimal

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

Mais rappelez-vous! L'arrondissement n'est pas distributif, c'est-à-dire. round(x*y) != round(x) * round(y). Donc, ne faites pas d'arrondis jusqu'à la fin d'un calcul, sinon vous perdrez de la précision.

1

chaîne a = "10,65678";

décimal d = Math.Round (Convert.ToDouble (a.ToString()), 2)

9

// 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 également 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" 
+1

String.Format ("{0: 0,00}", 140,6767554); ! = "140.67" Le rendu est réellement "140.68" - arrondi – AndyT

0
public double RoundDown(double number, int decimalPlaces) 
     { 
      return Math.Floor(number * Math.Pow(10, decimalPlaces))/Math.Pow(10, decimalPlaces); 
     } 
0

Math.Floor (123456,646 * 100)/100 reviendriez 123456,64

2

Je sais que une vieille question, mais s'il vous plaît noter les différences suivantes entre Math rondes et Format de la chaîne ronde:

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" 
Questions connexes