Подтвердить что ты не робот

Как преобразовать результат Math.Ceiling в int?

Math.Ceiling возвращает double, потому что double может хранить гораздо большие числа. Однако, если я уверен, что тип int способен хранить результат, как мне преобразовать? Безопасно ли использовать (int) Math.Ceiling(...?

4b9b3361

Ответ 1

Если вы уверены, что не перекрещиваете емкость int, это должно быть совершенно безопасно делать

int myInt = (int)Math.Ceiling(...);

Если вы не уверены в привязке, вы можете пойти с long вместо int.

Ответ 2

Из практики С++ я бы использовал следующее. Это гарантировало получение правильного результата, даже когда потолок возвращает 99.99999... 8 или 100.000000... 1

var result = (int)(Math.Ceiling(value) + 0.5);

Код ниже также должен работать, если вы доверяете его реализации

var result = Convert.ToInt32(value);

Ответ 3

Я бы пошел с

int x = (int)Math.Ceiling(0.9); // 1

Ответ 4

Если вы сомневаетесь, вы всегда можете поставить оператор if и проверить, больше ли число, которое вы получили, затем int.MaxValue

Ответ 5

int oInt = Convert.ToInt32(Math.Ceiling(value));

так как Math.Ceiling возвращает double и вы хотите преобразовать его в int, используйте Convert Класс. Пример:

double[] values= { Double.MinValue, -1.38e10, -1023.299, -12.98,
                   0, 9.113e-16, 103.919, 17834.191, Double.MaxValue };
int result;

foreach (double value in values)
{
   try {
      result = Convert.ToInt32(value);
      Console.WriteLine("Converted the {0} value '{1}' to the {2} value {3}.",
                        value.GetType().Name, value,
                        result.GetType().Name, result);
   }
   catch (OverflowException) {
      Console.WriteLine("{0} is outside the range of the Int32 type.", value);
   }   
}                                 
//    -1.79769313486232E+308 is outside the range of the Int32 type.
//    -13800000000 is outside the range of the Int16 type.
//    Converted the Double value '-1023.299' to the Int32 value -1023.
//    Converted the Double value '-12.98' to the Int32 value -13.
//    Converted the Double value '0' to the Int32 value 0.
//    Converted the Double value '9.113E-16' to the Int32 value 0.
//    Converted the Double value '103.919' to the Int32 value 104.
//    Converted the Double value '17834.191' to the Int32 value 17834.
//    1.79769313486232E+308 is outside the range of the Int32 type.