jueves, 2 de agosto de 2007

Problemas con Math.Round


Recientemente estaba trabajando con un proyecto que involucra el manejo de calificaciones. Para los redondeos de calificaciones estaba usando la función round del namespace Math.

Pues todo iba muy bien hasta que empezó a ir mal ñ_ñ. Sucede que si haces algo así:
Math.Round(95.5,0) el resultado esperado es 96... y efectivamnete eso es lo que resulta.
Sin embargo, al hacer esto:
Math.Round(92.5,0) el resultado esperado es 93 ... pero no, arroja un 92 u_u.

Lo que dice MSDN al respecto es esta función se apega al estandar IEEE Standard 754 y pues por extraño que parezca, ese es el resultado "correcto".

Para resolverlo, sólo hay que usar la sobrecarga de esta función que adicional a los dos parámetros (número a redondear, numero de decimales) añade un tercero que es un enumerator llamado MidpointRounding y elegir AwayFromZero, así:

Math.Round(92.5,0,MidpointRounding.AwayFromZero)
Resultado:93 ñ_ñ

1 comentario:

Anónimo dijo...

Took me time to read the whole article, the article is great but the comments bring more brainstorm ideas, thanks.

- Johnson