Конвертировать double в int

Каков наилучший способ преобразования double в int? Должен ли использоваться литой?

Ответ 1

Вы можете использовать трансляцию, если вы хотите, чтобы поведение по умолчанию было усечено по отношению к нулю. Кроме того, вы можете использовать Math.Ceiling, Math.Round, Math.Floor и т.д., Хотя вам все равно потребуется бросок впоследствии.

Не забывайте, что диапазон int намного меньше диапазона double. Выброс из double в int не будет генерировать исключение, если значение находится вне диапазона int в неконтролируемом контексте, тогда как вызов Convert.ToInt32(double) будет. Результат cast (в неконтролируемом контексте) явно undefined, если значение вне диапазона.

Ответ 2

если вы используете cast, т.е. (int)SomeDouble, вы обрезаете дробную часть. То есть, если SomeDouble было 4.9999, результат будет равен 4, а не 5. Преобразование в int не округляет число. Если вы хотите использовать закругление Math.Round

Ответ 3

Да, почему бы и нет?

double someDouble = 12323.2;
int someInt = (int)someDouble;

Использование класса Convert тоже хорошо работает.

int someOtherInt = Convert.ToInt32(someDouble);

Ответ 4

Convert.ToInt32 - лучший способ конвертировать

Ответ 5

Я думаю, что лучший способ - Convert.ToInt32.

Ответ 6

Вот полный пример

class Example 
{    
  public static void Main() 
  {    
    double x, y; 
    int i; 

    x = 10.0; 
    y = 3.0; 

    // cast double to int, fractional component lost (Line to be replaced) 
    i = (int) (x / y); 
    Console.WriteLine("Integer outcome of x / y: " + i); 
  }    
}

Если вы хотите округлить число до ближайшего целого числа, выполните следующие действия:

i = (int) Math.Round(x / y); // Line replaced

Ответ 7

Лучший способ - просто использовать Convert.ToInt32. Это быстро и точно округляет.

Почему сложнее?

Ответ 8

Мои способы:

 - Convert.ToInt32(double_value)
 - (int)double_value
 - Int32.Parse(double_value.ToString());

Ответ 9

label8.Text = "" + years.ToString("00") + " years";

когда вы хотите отправить его на ярлык или что-то еще, и вам не нужен какой-либо дробный компонент, это лучший способ

label8.Text = "" + years.ToString("00.00") + " years";

если вы хотите только с 2, и всегда это нравится

Ответ 10

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