2010-04-08 12 views
17

W C, jaka jest różnica między tymi dwoma?C: różnica między (int) x a podłogą (x)?

float myF = 5.6; 

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

Kiedy jest lepszy od drugiego?

+10

spróbuj 'floor (-5.5)' – tzenes

+0

Możliwy duplikat [Cast na int vs floor] (http://stackoverflow.com/questions/3300290/cast-to-int-vs-ploor) – STF

Odpowiedz

29

Jedną z dużych różnic jest liczba ujemna; jeśli zmienisz myF na -5.6, to odlewanie do int zwraca -5 podczas jest .

co do których korzystne jest, jako zasada powiedziałbym tylko rzutowany na int jeśli wiesz to co trzeba - i skoro pytasz tutaj, są szanse, że prawdopodobnie chcesz floor.

(również pamiętać, że ze printf formatowania %ld jest długa liczba całkowita; podwójny jest %lf).

1

Czy chcesz uzyskać wynik jako liczbę całkowitą lub podwójną?

Jeśli chcesz liczbę całkowitą, rzuć; jeśli chcesz podwójne, użyj floor.

Na przykład, jeśli chcesz uzyskać cosinus wartości, powinieneś po prostu użyć floor jako cos robi podwójne.

Ale jeśli chcesz użyć wartości dla exit (tylko wybierając losowy interfejs API tutaj), powinieneś rzucić, ponieważ exit ma int.

1

Pierwszy z nich rzuca twoją wartość zmiennoprzecinkową jako liczbę całkowitą (i używasz specyfikatora int w wywołaniu printf).

Ten ostatni używa piętra (z biblioteki matematyki C), aby zwrócić podwójne zaokrąglenie w dół.

+4

'Math.floor 'nie jest w C. –

+2

Cóż, tak, technicznie poprawne. "Math.floor" nie jest w C. Myślę, że wiesz o co mi chodzi. Sprawdź moją edycję. – bdl

+2

Tak, zrobiłem. Przepraszam, jeśli odszedłem jako palant. To miejsce skłania ludzi do obłędu ... –

3

Po uzyskaniu wartości floor podwójnej, ta "liczba całkowita" double może lub nie może być reprezentowana w zmiennej typu int.

5

floor(n) zwraca matematycznego podłogę n, czyli największą liczbę całkowitą nie większą niż n. (int)n zwraca obcięcie z n, liczby całkowitej, której wartość bezwzględna nie jest większa niż wartość n. Podobnie, ceil(n) zwraca matematyczny pułap n lub najmniejszą liczbę całkowitą nie mniejszą niż n. Jak zauważył AraK, liczba zwrócona przez floor() lub ceil() może nie pasować do zakresu int.

Powiązane problemy