2011-05-12 11 views
8

Necesito el código C para redondear un valor doble al siguiente valor entero más grande.Redondeo de números dobles en Objective-C

Por ejemplo, si tengo:

1.0 (double) Debe ser 1 (int)
1.01 (double) debe ser 2 (int)
5.67 (double) Debe ser 6 (int)
76.43 (double) Debe ser 77 (int)

¿Existe una solución?

+3

[Así que muchos duplicados] (http://stackoverflow.com/search?q=%5Bobjc%5D+round+up+double) ... –

Respuesta

30

utilizar la función de ceil()<math.h>:

#include <math.h> 

double x = 1.01;  // x = 1.01 
double y = ceil(x); // y = 2.0 
int i = (int)y;  // i = 2 

o más concisa, si lo que desea el resultado int:

int i = (int)ceil(x); 
+0

Es posible que desee compruebe el rango del resultado antes de convertir a 'int', ya que de lo contrario la conversión invoca un comportamiento indefinido. –

+0

@R .: true - para simplificar, supongo que se sabe que el resultado se encuentra dentro del rango de un 'int' pero, en el caso más general, necesitamos realizar una comprobación de rango antes de la conversión. –

-1

digamos que su número flotante es nr. No hay construir-en funciones:

float nr; 
int temp; 
if (nr % 10 > 0) { 
    temp = nr++; 
} else { 
    temp = nr; 
} 
nr = temp; 
+0

Aparte de las asignaciones innecesarias ('nr ++'?), Fundición implícita y verbosidad, hay un error en el código: 'nr% 10' probablemente debería ser' nr% 1'. – CompuChip