2010-11-09 4 views
16

Возможные Дублировать:
Why does Math.Floor(Double) return a value of type Double?Почему C# Math.Floor() возвращают Double вместо Int

Почему C# Math.Floor() возвращение double вместо int

Из MSDN Документы:

Возвращает наибольшее целое меньше или равна указанному двойной точности с плавающей запятой числа

он говорит, он возвращает целое число. Его нормально возвращать double, я всегда могу отдать его int, но его просто довольно странно, не так ли?

+1

Это плохо сформулировано. Возможно, он должен сказать «целое число» (или что-то еще, даже в примечаниях), чтобы избежать двусмысленности с типом данных * int * eger. Однако [integer] (http://en.wikipedia.org/wiki/Integer) является математическим термином, поэтому, в то же время запутывая здесь, технически корректно. – 2010-11-09 06:05:39

ответ

38

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

Просто, чтобы показать вам, что я имею в виду:

Double.MaxValue = 1.7976931348623157E + 308

Integer.MaxValue = 2147483647

Таким образом, вы могли бы иметь двойника, который 3,000,000,000.50 и пол его, который переполнил бы максимальное значение int.

+3

Это хорошее объяснение, почему это имеет смысл ... объяснение, почему это так, намного проще - результат FPU является «двойным». Поскольку много раз вы хотите использовать его как «double» (возможно, вычесть его из аргумента, чтобы получить дробную часть), было бы бессмысленно его преобразовывать, а затем его нужно было преобразовать. –

+1

@Ben Voigt - также хороший момент, но не объясняет, почему возвращаемое значение НЕ может быть типа Integer, поскольку документация граничит с предложением. Просто потому, что вывод FPU что-то не означает, что метод должен возвращать этот результат, esp в среде, отличной от среды выполнения. Возможно, документация MSDN должна была использовать фразу «неотъемлемая часть» или что-то подобное вместо этого, чтобы избежать путаницы с именем типа. – userx

+2

если это была вещь размера, наверняка они могли бы просто вернуть длинный/Int64? – mike

3

Поскольку ВХОД является двойной, то OUTPUT также должен быть двойной, или много потенциального объема производства не будет вписываться в выходной переменной.

В математических терминах, домени диапазон функции должны иметь одинаковый размер.