Come arrotondate un numero a due cifre decimali in C #?

Voglio farlo usando la funzione Math.Round

Ecco alcuni esempi:

 decimal a = 1.994444M; Math.Round(a, 2); //returns 1.99 decimal b = 1.995555M; Math.Round(b, 2); //returns 2.00 

Potresti anche voler vedere i banchieri arrotondati / round-to-even con il seguente sovraccarico:

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

Ci sono più informazioni qui .

Prova questo:

 twoDec = Math.Round(val, 2) 

Personalmente non ho mai arrotondato nulla. Tienilo il più risoluto ansible, poiché arrotondare è un po ‘una falsa pista in CS comunque. Ma tu vuoi formattare i dati per i tuoi utenti, e a tal fine, trovo che string.Format("{0:0.00}", number) è un buon approccio.

Se desideri una stringa

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

O un decimale

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

Ma ricorda! L’arrotondamento non è distributivo, cioè. round(x*y) != round(x) * round(y) . Quindi non fare alcun arrotondamento fino alla fine di un calcolo, altrimenti perderai precisione.

Wikipedia ha una bella pagina sull’arrotondamento in generale.

Tutti i linguaggi .NET (gestiti) possono utilizzare uno qualsiasi dei meccanismi di arrotondamento del Common Language Run Time (CLR). Ad esempio, il metodo Math.Round () (come menzionato sopra) consente allo sviluppatore di specificare il tipo di arrotondamento (da arrotondato a uniforms o da lontano a zero). Il metodo Convert.ToInt32 () e le sue varianti utilizzano round-to-even . I metodi Ceiling () e Floor () sono correlati.

Puoi arrotondare anche con la formattazione numerica personalizzata .

Notare che Decimal.Round () utilizza un metodo diverso da Math.Round ();

Ecco un’utile posizione sull’algoritmo di arrotondamento del banchiere. Vedi uno dei post umoristici di Raymond sull’arrotondamento …

// converti fino a due cifre decimali

 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" 

può anche combinare “0” con “#”.

 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" 

So che è una vecchia domanda, ma ti preghiamo di notare le seguenti differenze tra round matematico e round di formato String :

 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" 

Questo è per l’arrotondamento a 2 posizioni decimali in C #:

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

In VB.NET:

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

Una cosa che potresti voler controllare è il meccanismo di arrotondamento di Math.Round:

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

Oltre a questo, raccomando l’approccio Math.Round (inputNumer, numberOfPlaces) su quello * 100/100 perché è più pulito.

Dovresti essere in grado di specificare il numero di cifre che vuoi arrotondare usando Math.Round (YourNumber, 2)

Puoi leggere di più qui .

string a = “10.65678”;

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

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

Math.Floor (123456.646 * 100) / 100 restituirebbe 123456.64