2010-07-19 18 views
24

Como puedo redondear un número al valor X más cercano (por ejemplo 50)objetivo-c número redondeo al más cercano 50

es decir 47 sería 50

24 habría 0

74 sería 50

99 habría 100

etc ...

Realmente no tengo idea de dónde empezar a buscar cómo hacer esto ...

P.S. Im usando cacao táctil para el iPhone

Muchas gracias Marcos

Respuesta

50

Haga lo siguiente:

50.0 * floor((Number/50.0)+0.5) 
+3

O ", el De la misma forma en que podría hacerlo en C "... –

+0

gracias a ambas formas funcionó bien – Mark

+1

50 * piso ((Número/50) +0.5) podría ser un poco mejor. – djschwartz

13

Dividir por 50, redondos al entero más próximo, y se multiplica por 50.

6

Si el número es positivo: 50 * piso (número/50 + 0.5);

Si el número es negativo: 50 * ceil (número/50 - 0.5);

1

Me gustaría proponer una solución menos elegante, aunque más precisa; solo funciona para números objetivo.

En este ejemplo se redondea un número determinado de segundos para la próxima completo de 60:

int roundSeconds(int inDuration) { 

    const int k_TargetValue = 60; 
    const int k_HalfTargetValue = k_TargetValue/2; 

    int l_Seconds = round(inDuration);       // [MININT .. MAXINT] 
    int l_RemainingSeconds = l_Seconds % k_TargetValue;   // [-0:59 .. +0:59] 
    if (ABS(l_RemainingSeconds) < k_HalfTargetValue) {   // [-0:29 .. +0:29] 
     l_Seconds -= l_RemainingSeconds;       // --> round down 
    } else if (l_RemainingSeconds < 0) {       // [-0:59 .. -0:30] 
     l_Seconds -= (k_TargetValue - ABS(l_RemainingSeconds)); // --> round down 
    } else {              // [+0:30 .. +0:59] 
     l_Seconds += (k_TargetValue - l_RemainingSeconds);  // --> round up 
    } 

    return l_Seconds; 
} 
7

Así, ha dicho que combina żQué aquí, aquí es función general:

float RoundTo(float number, float to) 
{ 
    if (number >= 0) { 
     return to * floorf(number/to + 0.5f); 
    } 
    else { 
     return to * ceilf(number/to - 0.5f); 
    } 
} 
Cuestiones relacionadas