Почему round () и ceil () не возвращают целое число? - PullRequest
58 голосов
/ 10 августа 2009

Время от времени я округляю некоторые числа, и мне всегда приходится приводить результат к целому числу:

int rounded = (int) floor(value);

Почему все функции округления (ceil(), floor()) возвращают плавающее число, а не целое число? Я нахожу это довольно не интуитивно понятным и хотел бы получить некоторые объяснения!

Ответы [ 2 ]

66 голосов
/ 10 августа 2009

Интегральное значение, возвращаемое этими функциями, может быть слишком большим для хранения в целочисленном типе (int, long и т. Д.). Чтобы избежать переполнения, которое приведет к неопределенным результатам, приложение должно выполнить проверку диапазона возвращаемого значения, прежде чем присвоить его целочисленному типу.

со страницы руководства по ceil (3) Linux.

27 голосов
/ 10 августа 2009

Это потому, что диапазон float шире, чем int. Что вы ожидаете получить, если значение, возвращаемое этими функциями, не помещается в int? Это было бы неопределенным поведением, и вы не сможете проверить это в своей программе.

...