2012-09-27 17 views
33

Eventuali duplicati:
How do you round a number to two decimal places in C#?A completare una variabile con due cifre decimali C#

Sono interessato a come arrotondare le variabili a due cifre decimali. Nell'esempio seguente, il bonus è solitamente un numero con quattro cifre decimali. C'è un modo per garantire che la variabile retributiva sia sempre arrotondata a due cifre decimali?

 pay = 200 + bonus; 
     Console.WriteLine(pay); 
+0

Ricerca Google? http://stackoverflow.com/questions/257005/how-do-you-round-a-number-to-two-decimal-places-in-c – eouw0o83hf

+0

Il tag dei compiti è obsoleto –

+0

wow Tag HomeWork ?? appena visto ora, http://meta.stackexchange.com/questions/147100/the-homework-tag-is-now-officially-deprecated?cb=1 – Habib

risposta

72

Utilizzare Math.Round e specificare il numero di posizioni decimali.

Math.Round(pay,2); 

Math.Round Method (Double, Int32)

Arrotonda un doppia precisione in virgola mobile valore ad un determinato numero di cifre decimali .

O Math.Round Method (Decimal, Int32)

Arrotonda un valore decimale in un numero specificato di cifre decimali.

+0

E assicurati stai usando un tipo 'float',' double' o 'decimal', altrimenti non funzionerà mai. – Aidiakapi

+0

Sto usando un doppio, ma non funziona ancora per me. –

+3

chiamalo come 'pay = Math.Round (paga, 2);' – Habib

5
decimal pay = 1.994444M; 

Math.Round(pay , 2); 
1
Console.WriteLine(decimal.Round(pay,2)); 
4

È possibile arrotondare il risultato e utilizzare string.Format per impostare la precisione in questo modo:

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

Dubito che tu possa usare 'paga' in due sensi diversi nella prima riga! Quando usi già 'Math.Round', forse non è nexessary usare anche la formattazione delle stringhe? Se non si desidera arrotondare la struttura del numero effettivo, ma si desidera solo accorciare la stringa prodotta, la formattazione delle stringhe è una buona cosa. In questo caso, considera anche le stringhe di formattazione '" F "' o '" F2 "' (e '" N "', '" N2 "'), ad esempio 'stringa.Formato (" {0: N} ", pagare) 'o in modo equivalente' pay.ToString ("N") '. –

+0

@JeppeStigNielsen Hai assolutamente ragione sulla prima linea! Modificato. Interessante, non avevo mai usato '{0: N}' prima, suppongo che sia una creatura abitudine; o) –

+0

Per spiegare ulteriormente, '" F "' arrotonda ad un numero di decimali specificato dal 'NumeroFormato' della cultura corrente del thread corrente. Questo sarebbe spesso due decimali. '" F2 "' arrotonda sempre a due decimali. '" N "' e '" N2 "' sono simili ma inseriscono anche separatori di gruppo in base alla cultura. Ad esempio '(11223344.5566m) .ToString (" N ")' potrebbe produrre il numero formattato '" 11,223,344.56 "' in alcune culture. Vedere [Stringhe di formato numerico standard] (http://msdn.microsoft.com/en-us/library/dwhawy9k.aspx). –

2

assicurarsi di fornire un numero, in genere un doppio viene utilizzato. Math.Round può richiedere 1-3 argomenti, il primo argomento è la variabile che si desidera arrotondare, il secondo è il numero di cifre decimali e il terzo è il tipo di arrotondamento.

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); 
17

È necessario utilizzare un modulo Math.Round. Tenere presente che l'impostazione Math.Round imposta l'arrotondamento del banchiere (arrotondando al numero pari più vicino) a meno che non si specifichi un valore MidpointRounding. Se non si desidera utilizzare arrotondamento, si dovrebbe usare Math.Round(decimal d, int decimals, MidpointRounding mode), in questo modo:

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 

(Why does .NET use banker's rounding?)

2

Prestare attenzione sul fatto che Roundturni.

Così (non so se è importante nel vostro settore o no), ma:

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

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

Per renderlo più preciso per vostro caso possiamo fare qualcosa di simile:

int aInt = (int)(a*100); 
float aFloat= aInt /100.0f; 
//result:12,34 
+0

Math.Round non accetta un numero float come parametro. –

Problemi correlati