Uso Math.Floor si desea redondear hacia abajo tha valor o Math.Round si desea obtener una ronda exacta. Math.Truncate basta con quitar la parte decimal del número, para que pueda obtener malos resultados para los números negativos:
var result= Math.Floor(number * 100)/100;
Math.floor siempre devuelve el valor más pequeño integral que es menor (de suelo) o superior (techo) de la valor específico. Entonces no obtienes un redondeo correcto. Ejemplo:
Math.Floor(1.127 * 100)/100 == 1.12 //should be 1.13 for an exact round
Math.Ceiling(1.121 * 100)/100 == 1.13 //should be 1.12 for an exact round
Siempre prefiera la versión de Math.Round que contenga 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
Math.Round(2.035,2)==2.04
lugar, utilizando MidPoint.AwayFromZero param:
Math.Round(2.025,2,MidpointRounding.AwayFromZero)==2.03
Math.Round(2.035,2,MidpointRounding.AwayFromZero)==2.04
Así, para un redondeo normal, lo mejor es utilizar este código:
¿Desea redondear el decimal mismo o una representación de texto? –
@Henk, necesito mostrar el valor como texto, pero prefiero redondear antes de la salida. Es probable que el valor tendrá que alimentar a otros calcs más tarde. –
posible duplicado de [Redondea un doble a 2 cifras significativas después del punto decimal] (http: // stackoverflow.com/questions/2808535/round-a-double-to-2-significant-figures-after-decimal-point) – ecatmur