2011-08-01 18 views
12

Necesito encontrar una división de dos números enteros y se redondea al siguiente número entero superiorMath redondo para siempre número entero superior

por ejemplo x = 7/y = 5 = 2; aquí xey siempre mayor que 0

Este es mi código actual

int roundValue = x % y > 0? x/y + 1: x/y; 

¿Hay alguna forma mejor de hacer esto?

+0

duplicado? http://stackoverflow.com/questions/921180/how-can-i-ensure-that-a-division-of-integers-is- allways-rounded-up/926806 – chrisaut

Respuesta

36

Usted podía uso Math.Ceiling ... sino que requerirá la conversión a/desde double valores.

Otra alternativa es usar Math.DivRem para hacer ambas partes al mismo tiempo.

public static int DivideRoundingUp(int x, int y) 
{ 
    // TODO: Define behaviour for negative numbers 
    int remainder; 
    int quotient = Math.DivRem(x, y, out remainder); 
    return remainder == 0 ? quotient : quotient + 1; 
} 
+0

Gracias @Jone por favor agregue _out remainder_ como parámetro para complete su respuesta – Damith

+0

@DSW: Doh :) Listo. –

+0

Todavía no compila;) – porges

1

Utilice ceil() function. Da el valor superior.

18

Trate (int)Math.Ceiling(((double)x)/y)

3

sé qué es mejor manera o de cómo definir una mejor manera (si en términos de rendimiento que tiene que realizar pruebas para ver que será más rápido), pero aquí está mi solución:

int roundValue = x/y + Convert.ToInt32(x%y>0); 

ps

todavía tienen que tratar de alguna manera con neg. números ... IMO esta es la más simple.

6

Todas las soluciones se ven demasiado difíciles. Para valor superior de x/y, utilice éste

(x + y - 1)/y 
+0

'agrega otro grupo, pero resta uno en caso de que ya tengas un grupo completo' - gran idea. Parece que no hay problema siempre y cuando los puntos sean positivos. ¡gracias por compartir! – jacoblambert