Диапазон double
намного шире, чем диапазон int
или long
. Рассмотрим этот код:
double d = 100000000000000000000d;
long x = Math.Floor(d); // Invalid in reality
Целое число находится вне диапазона long
- так что вы ожидаете, что произойдет?
Как правило, вы знаете, что значение будет на самом деле находиться в диапазоне int
или long
, поэтому вы разыгрываете его:
double d = 1000.1234d;
int x = (int) Math.Floor(d);
но ответственность за это приведение лежит на самом разработчике, а не на Math.Floor
. Было бы неоправданно ограничивать его просто сбоем, за исключением всех значений вне диапазона long
.