2010-04-13 40 views
31

He creado un juego que da una puntuación al final del juego, pero el problema es que este puntaje a veces es un número con muchos dígitos después del punto decimal (como 87.124563563566) ¿Cómo voy a redondear hacia arriba o hacia abajo el valor para poder tener algo así como 87.12?Redondeo de valores hacia arriba o hacia abajo en C#

Gracias!

+10

¿por qué hay una gran abundancia tales en una pregunta como ésta? – zxgear

+5

¿Y por qué tantas votaciones ascendentes sobre una respuesta que solo redondea a números enteros, cuando la pregunta da un ejemplo con dos decimales? – CupawnTae

+1

@JohnH Parece que el cartel de la recompensa se ha ido de compras en la última semana. – OhBeWise

Respuesta

36

Intente utilizar Math.Round. Sus diversas sobrecargas le permiten especificar cuántos dígitos desea y también la forma en que desea redondear el número.

+14

Y lo más probable es que desee utilizar 'Math.Round (87.123453563566, 2, MidpointRounding.AwayFromZero);'. –

5
double test2 = 87.2345524523452; 
double test3 = Math.Round(test2, 2); 
84

Uso Math.Ceiling(87.124563563566) o Math.Floor(87.124563563566) para siempre el redondeo hacia arriba o hacia abajo redondeo. Creo que esto va al número entero más cercano.

+1

Esto es justo lo que estaba buscando, las funciones que hacen lo mismo que las funciones de Excel ROUNDUP y ROUNDOWN. ¡Muchas gracias! –

6

Simplemente desea formatear la cadena, no para corromper la puntuación.

3

El número está bien para double tipo de variable y matemáticamente correcto.
Tiene dos soluciones bien establecidas para evitar tales situaciones.

  1. solución de cadena de: Cuando se muestra el número de usuarios, sólo lo hacen: variable.ToString ("0.00"). ToString solo está reduciendo el número.
  2. solución de redondeo: Si desea controlar el redondeo, puede utilizar la biblioteca Math.

que desea saber por qué aparece este número "raro", se puede leer allí: irrational numbers

1

no tengo la reputación suficiente añadir comentarios, así que tengo que crear una respuesta. Pero timurid tiene razón, simplemente formatee la cadena.

Creo que lo que busca es:

var myScore = 87.124563563566 
var toShowOnScreen = myScore.ToString("0.00"); 

se describen algunas de las formas personalizadas para dar formato a los valores aquí: https://msdn.microsoft.com/en-US/library/7x5bacwt(v=vs.80).aspx

0

Una gran cantidad de personas están abogando utiliza la matemática biblioteca para redondear su número, pero incluso eso puede provocar errores de redondeo muy pequeños. Math.Round puede, y algunas veces devuelve números con un número de ceros finales y errores de redondeo muy pequeños. Esto se debe a que, internamente, los flotantes y los dobles se siguen representando como números binarios, por lo que a menudo puede ser difícil representar ciertos pequeños números decimales limpiamente.

Su mejor opción es o bien sólo formateo uso cuerda o, si no quiere que en realidad todo el año, se combinan los dos:

Math.Round(val, 2).ToString("0.00") 
8

Para redondear siempre hacia abajo a 2 decimales:

decimal score = 87.126; 
Math.Floor(score * 100)/100; // 87.12 

para redondear siempre al 2 lugares decimales:

decimal score = 87.124; 
Math.Ceiling(score * 100)/100; // 87.13 
Cuestiones relacionadas