2010-04-08 18 views
17

En C, ¿cuál es la diferencia entre estos dos?C: diferencia entre (int) x y floor (x)?

float myF = 5.6; 

printf("%i \n", (int)myF); // gives me "5" 
printf("%ld \n", floor(myF)); // also "5"? 

¿Cuándo es preferible uno sobre el otro?

+10

try 'floor (-5.5)' – tzenes

+0

Posible duplicado de [Cast to int vs floor] (http://stackoverflow.com/questions/3300290/cast-to-int-vs-floor) – STF

Respuesta

29

Una gran diferencia es la de los números negativos; si cambia myF a -5.6, entonces fundir en un int devuelve -5 mientras que floor(myF) es -6.

En cuanto a cuál es preferible, como regla general, yo diría que solo enviar a un int si sabe eso es lo que necesita, y ya que está preguntando aquí, es probable que quiera floor.

(también señalan que con printf formato, %ld es un entero largo; un doble es %lf.)

1

¿Desea el resultado como un número entero o como un doble?

Si quiere un número entero, molde; si quieres un doble, usa floor.

Por ejemplo, si desea obtener el coseno del valor, debe simplemente usar floor como cos tiene un doble.

Pero si desea utilizar el valor de exit (simplemente seleccionando una API aleatoria aquí), debe enviar porque exit toma una int.

1

El primero arroja su valor flotante como un entero (y está utilizando un especificador int en la llamada printf).

Este último usa el piso (de C math lib) para devolver un doble que se ha redondeado hacia abajo.

+4

'Math.floor 'no está en C. –

+2

Bueno, sí, eres técnicamente correcto. "Math.floor" no está en C. Creo que sabes lo que quise decir. Verifica mi edición – bdl

+2

Sí, lo hice. Lo siento si salí como un idiota. Este lugar tiende a volver a las personas un poco auto-justas ... –

3

Cuando obtiene el floor del doble, ese "entero" double puede o no ser representable en una variable de tipo int.

5

floor(n) devuelve el piso matemática de n, es decir, el mayor entero no mayor que n. (int)n devuelve el truncamiento de n, el entero cuyo valor absoluto no es mayor que el de n. Del mismo modo, ceil(n) devuelve el techo matemático de n, o el entero más pequeño no menor que n. Como señaló AraK, el número devuelto por floor() o ceil() puede no ajustarse dentro del rango de int.

Cuestiones relacionadas