Redondear una variable a dos decimales C #[duplicar]


Posible Duplicado:
¿Cómo redondear un número a dos decimales en C#?

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

      pay = 200 + bonus;
      Console.WriteLine(pay);
Author: Community, 2012-09-27

8 answers

Use Matemáticas.Redondee y especifique el número de decimales.

Math.Round(pay,2);

Matemáticas.Método redondo (Doble, Int32)

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

O Matemáticas.Método redondo (Decimal, Int32)

Redondea un valor decimal a un número especificado de dígitos fraccionarios.

 77
Author: Habib,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-09-27 12:41:58

Debe utilizar una forma de Math.Round. Tenga en cuenta que Math.Round el valor predeterminado es el redondeo del banquero (redondeo al número par más cercano) a menos que especifique un MidpointRounding valor. Si no desea utilizar el redondeo del banquero, debe usar Math.Round(decimal d, int decimals, MidpointRounding mode), así:

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

(¿Por qué. NET utiliza el redondeo de banker?)

 20
Author: Jon Senchyna,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 12:26:20
decimal pay  = 1.994444M;

Math.Round(pay , 2); 
 5
Author: Aghilas Yakoub,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-09-27 12:43:01

Puede redondear el resultado y usar 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);
 4
Author: Paul Aldred-Bann,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-09-27 13:16:19

Asegúrese de proporcionar un número, por lo general se utiliza un doble. Matemáticas.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);
 2
Author: Sean,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-09-27 12:45:58

Preste atención al hecho de que Round rondas .

Así que (no se si importa en tu industria o no), pero:

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

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

Para hacerlo más preciso para su caso podemos hacer algo como esto:

int aInt = (int)(a*100);
float aFloat= aInt /100.0f;
//result:12,34 
 2
Author: Tigran,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-09-27 12:48:35

Utilice el sistema.Matemáticas.Round to redondea un valor decimal a un número especificado de dígitos fraccionarios.

var pay = 200 + bonus;
pay = System.Math.Round(pay, 2);
Console.WriteLine(pay);

Referencias MSDN:

 2
Author: Furqan Safdar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-09-27 12:50:42
Console.WriteLine(decimal.Round(pay,2));
 1
Author: Jakub Szułakiewicz,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-09-27 12:44:12