2008-11-02 45 views

Respuesta

69

Prueba esto:

twoDec = Math.Round(val, 2) 
468

He aquí un ejemplo:

decimal a = 1.994444M; 

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

decimal b = 1.995555M; 

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

También puede ser que desee mirar a los banqueros redondeo/round-a- incluso con la siguiente sobrecarga:

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

Hay más información en él here.

+40

Deberías cla rify que MidPointRounding.ToEven ES el valor predeterminado. Si quería AwayFromZero, tendría que usar la sobrecarga –

+4

I wounder por qué MidPointRounding.ToEven es el predeterminado ... – Pedro77

+2

Creo que debería ser: 'MidpointRounding' no' MidPointRounding' en caso de que alguien se pregunte por qué no está compilando. –

3

Usted debe ser capaz de especificar el número de dígitos que desea redondear al uso Math.Round (YourNumber, 2)

Puede leer más here.

12

Wikipedia has a nice page en el redondeo en general.

Todos los lenguajes .NET (gestionados) pueden usar cualquiera de los mecanismos de redondeo de lenguaje común (el CLR). Por ejemplo, el método Math.Round() (como se mencionó anteriormente) permite al desarrollador especificar el tipo de redondeo (Round-a-par o lejos de cero). El método Convert.ToInt32() y sus variaciones usan round-to-even. Los métodos Ceiling() y Floor() están relacionados.

Puede redondear con custom numeric formatting también.

Tenga en cuenta que Decimal.Round() utiliza un método diferente que Math.Round();

Aquí hay un useful pos t en el algoritmo de redondeo del banco. Ver uno de Raymond de posts here humorística sobre el redondeo ...

5

Esto es para redondear a 2 decimales en C#:

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

En VB.NET:

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

personalmente nunca he redondas cualquier cosa. Manténgalo tan resuelto como sea posible, ya que el redondeo es una especie de arenque rojo en CS de todos modos. Pero sí desea formatear los datos para sus usuarios, y con ese fin, me parece que string.Format("{0:0.00}", number) es un buen enfoque.

+0

Esto funciona mejor para propósitos de exhibición, especialmente para dinero, ya que £ 5.4 (con Math.round) no se ve tan bien como £ 5.40 (de esta manera). –

+0

Lo he intentado antes de string.Format ("0: 0.00", número), pero no funcionó. Esos corchetes son muy importantes, entonces: string.Format ("{0: 0.00}", number) funciona. – FrenkyB

+4

@FrenkyB Cuando dice 'corchetes', espero que se refiera a llaves. – Mathemats

22

Si desea una cadena

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

O un decimal

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

Pero recuerde! El redondeo no es distributivo, es decir. round(x*y) != round(x) * round(y). Así que no hagas ningún redondeo hasta el final de un cálculo, de lo contrario perderás precisión.

1

string a = "10.65678";

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

9

// convertir hasta dos decimales

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" 

también puede combinar "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" 
+1

String.Format ("{0: 0.00}", 140.6767554); ! = "140.67" En realidad se representa como "140.68" - redondeando hacia arriba – 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 regresarían 123456,64

2

Sé que es una vieja pregunta, pero tenga en cuenta las siguientes diferencias entre Matemáticas redondas y Formato de cadena redondo:

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" 
Cuestiones relacionadas