Ответ 1
Это потому, что диапазон a double
(± 5.0 × 10 -324 до ± 1.7 × 10 308) намного больше, чем диапазон a int
(-2,147,483,648 до 2,147,483,647). Если тип возврата был int
, многие возможные входы потерпели бы неудачу. Например, Math.Ceiling
может быть принудительно выбросить OverflowException
в checked или может даже вернуть неверный результат в неконтролируемый контекст. Это нежелательное поведение.
Также некоторые специальные значения, такие как NaN
и PositiveInfinity
, могут быть возвращены этим методом, Это возможно только в том случае, если тип возврата double
.
Если вы считаете, что результат будет вписываться в int, вы можете добавить явное выражение:
int result = (int)Math.Ceiling(a);