C: разница между (int) x и этажом (x)? - PullRequest
19 голосов
/ 09 апреля 2010

В С, в чем разница между этими двумя?

float myF = 5.6;

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

Когда один предпочтительнее другого?

Ответы [ 5 ]

29 голосов
/ 09 апреля 2010

Одна большая разница - это отрицательные числа; если вы измените myF на -5.6, тогда приведение к int вернет -5, тогда как floor(myF) будет -6.

Что касается того, что является предпочтительным, то, как правило, я бы сказал, что приведение к int возможно только в том случае, если вы знаете , это то, что вам нужно - и поскольку вы спрашиваете здесь, есть вероятность Вы, вероятно, хотите floor.

(Также обратите внимание, что при форматировании printf, %ld - это длинное целое число; двойное число равно %lf.)

5 голосов
/ 09 апреля 2010

floor(n) возвращает математическое поле n, то есть наибольшее целое число, не превышающее n. (int)n возвращает усечение n, целое число, у которого абсолютное значение не больше, чем n. Аналогично, ceil(n) возвращает математический потолок n, или наименьшее целое число, не меньшее n. Как указал АраК, число, возвращаемое floor() или ceil(), может не соответствовать диапазону int.

3 голосов
/ 09 апреля 2010

Когда вы получаете floor типа double, это "целое число" double может быть или не быть представимым в переменной типа int.

1 голос
/ 09 апреля 2010

Первый преобразует ваше значение с плавающей точкой в ​​целое число (и вы используете спецификатор int в вызове printf).

Последний использует слово floor (из математической библиотеки C) для возврата двойного числа, округленного в меньшую сторону.

0 голосов
/ 09 апреля 2010

Хотите ли вы результат в виде целого или двойного числа?

Если вы хотите целое число, приведите; если вы хотите удвоить, используйте floor.

Например, если вы хотите получить косинус значения, вы должны просто использовать floor, так как cos принимает удвоение.

Но если вы хотите использовать значение для exit (просто выбирая здесь случайный API), вам следует привести, потому что exit принимает целое число.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...