C: разница между (int) x и floor (x)?

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

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

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

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

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

(Также обратите внимание, что при форматировании printf %ld является длинным целым числом, а double – %lf .)

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

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

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

Последний использует пол (из C math lib), чтобы вернуть двойной, который был округлен.

Вы хотите, чтобы результат был целым или двойным?

Если вам нужно целое число, cast; если вы хотите двойной, используйте floor .

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

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