C: различие между (интервалом) x и полом (x)?

В C, каково различие между этими двумя?

float myF = 5.6;

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

Когда каждый предпочтителен по другому?

19
задан igul222 8 April 2010 в 23:57
поделиться

5 ответов

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

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

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

{{1} }
29
ответ дан 30 November 2019 в 03:28
поделиться

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

5
ответ дан 30 November 2019 в 03:28
поделиться

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

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

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

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

0
ответ дан 30 November 2019 в 03:28
поделиться

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

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

1
ответ дан 30 November 2019 в 03:28
поделиться

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

3
ответ дан 30 November 2019 в 03:28
поделиться
Другие вопросы по тегам:

Похожие вопросы: