2010-08-30 20 views
15

Duplicar posibles:
c# - How do I round a decimal value to 2 decimal places (for output on a page)doble vuelta a dos decimales

¿Cuál es la mejor manera de redondear un doble con dos decimales, y también ha sido resuelta en 2 lugares decimales?

Ejemplo: 2.346 -> 2,35, 2 -> 2,00

Tengo la esperanza de evitar algo como esto que tengo que convertir un doble a cadena y luego de nuevo a un doble, que parece una mala manera de haz esto

+5

Agregar los dos lugares decimales cuando son cero es una cosa visual/de representación, a algo 'double' no le importa en absoluto. Por lo tanto, seguramente tendrá que convertirlos en cadenas para su visualización. –

+0

Tienes razón, gracias. – Robert

Respuesta

30
double someValue = 2.346;  
String.Format("{0:0.00}", someValue); 
+4

No es necesario llamar a Math.Round aquí. – phoog

4

Tome un vistazo a Math.Round

+0

Math.Round no agrega ceros. – Robert

+0

@Robert - ¿Estás hablando para mostrar? – ChrisF

+0

Sí para mostrar. – Robert

15

redondear el valor a la precisión deseada, y luego darle formato. Siempre prefiera la versión de Math.Round que contiene el parámetro de redondeo de punto medio. Este parámetro especifica cómo manejar los valores de punto medio (5) como último dígito.

Si no especifica AwayFromZero como el valor para param, obtendrá el comportamiento predeterminado, que es ToEven. Por ejemplo, el uso de Toeven como método de redondeo, se obtiene:

Math.Round(2.025,2)==2.02 y

Math.Round(2.035,2)==2.04

lugar, utilizando MidPoint.AwayFromZero param:

Math.Round(2.025,2,MidpointRounding.AwayFromZero)==2.03 y

Math.Round(2.035,2,MidpointRounding.AwayFromZero)==2.04

Así, para un redondeo normal, lo mejor es utilizar este código:

var value=2.346; 
var result = Math.Round(value, 2, MidpointRounding.AwayFromZero); 
var str=String.Format("{0:0.00}", result); 
+0

No es necesario redondear el valor. Además, no es necesario utilizar string.Format(). En cambio, puede usar 'var value = 2.346; var str = value.ToString ("0.00"); 'Si usa double.ToString() o string.Format(), obtendrá el redondeo del punto medio lejos de cero. Así que debería reformular la primera oración: solo debería usar Math.Round() si necesita MidpointRounding.ToEven. – phoog

8
double someValue = 2.346;  
string displayString = someValue.ToString("0.00"); 

Tenga en cuenta que double.ToString (y por lo tanto string.Format()) utiliza el punto medio redondeo lejos de cero, por lo que se convierte en 0,125 0.13. Este suele ser el comportamiento deseado para mostrar. Estas cuerdas obviamente no deberían usarse para disparar en redondo.

Este método tampoco es apropiado para el redondeo que se requiere en cálculos matemáticos (donde MidpointRounding.ToEven suele ser el mejor enfoque). En ese caso, se debe usar Math.Round().

Cuestiones relacionadas