2012-09-27 164 views
33

Duplicar posibles:
How do you round a number to two decimal places in C#?Completando una variable con dos decimales de C#

Estoy interesado en la forma de redondear las variables con dos decimales. En el siguiente ejemplo, la bonificación suele ser un número con cuatro decimales. ¿Hay alguna forma de garantizar que la variable de pago siempre se redondee a dos lugares decimales?

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

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

+0

La etiqueta de tarea está obsoleta –

+0

wow Etiqueta HomeWork ?? acabo de verlo ahora, http://meta.stackexchange.com/questions/147100/the-homework-tag-is-now-officially-deprecated?cb=1 – Habib

Respuesta

72

Utilice Math.Round y especifique el número de decimales.

Math.Round(pay,2); 

Math.Round Method (Double, Int32)

Rondas un doble precisión en coma flotante de valor a un número especificado de dígitos fraccionarios .

O Math.Round Method (Decimal, Int32)

Rondas un valor decimal en un número especificado de dígitos fraccionarios.

+0

Y asegúrese está utilizando un tipo 'float',' double' o 'decimal'; de lo contrario, esto no funcionará. – Aidiakapi

+0

Estoy usando un doble, pero todavía no funciona para mí. –

+3

llámalo como 'pagar = Math.Round (pay, 2);' – Habib

5
decimal pay = 1.994444M; 

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

Puede redondear el resultado y utilizar string.Format para establecer la precisión de esta manera:

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

¡Dudo que puedas usar 'pay' en dos sentidos diferentes en la primera línea! Cuando ya usas 'Math.Round', ¿no es necesario utilizar el formato de cadenas también? Si no desea redondear la estructura del número real, sino solo acortar la cadena producida, el formateo de la cadena es una buena cosa. En ese caso, también considere cadenas de formato '" F "' o '" F2 "' (y '" N "', '" N2 "'), es decir, por ejemplo 'string.Format (" {0: N} ", pagar) 'o equivalentemente' pay.ToString ("N") '. –

+0

@JeppeStigNielsen ¡Tiene toda la razón sobre la primera línea! Enmendado Interesante, nunca había usado '{0: N}' antes, criatura de hábito, supongo; o) –

+0

Para explicar más, '' F "' redondea a un número de decimales especificado por 'NumberFormat' de la cultura actual del hilo actual. Esto a menudo sería dos decimales. '" F2 "' siempre se redondea a dos decimales. '" N "' y '" N2 "' son similares pero también insertan separadores de grupo de acuerdo con la cultura. Por ejemplo '(11223344.5566m) .ToString (" N ")' podría producir el número formateado '" 11,223,344.56 "' en alguna cultura. Consulte [Cadenas estándar de formato numérico] (http://msdn.microsoft.com/en-us/library/dwhawy9k.aspx). –

2

Asegúrese de proporcionar un número, por lo general se utiliza un doble. Math.Round puede tomar 1-3 argumentos, el primer argumento es la variable que desea redondear, el segundo es el número de decimales y el tercero es el tipo de redondeo.

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

Debe utilizar un formulario de Math.Round. Tenga en cuenta que Math.Round se predetermina al redondeo bancario (redondeando al número par más cercano) a menos que especifique un valor de MidpointRounding. Si no desea utilizar redondeo bancario, se debe utilizar Math.Round(decimal d, int decimals, MidpointRounding mode), así: la atención

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

de pago en el hecho de que Roundrondas.

Así que (no sé si es importante en su industria o no), pero:

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

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

para que sea más preciso para su caso podemos hacer algo como esto:

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

Math.Round no acepta un número flotante como parámetro. –

Cuestiones relacionadas