конвертировать двойной в int - PullRequest
131 голосов
/ 15 ноября 2010

Как лучше всего преобразовать double в int? Нужно ли использовать приведение?

Ответы [ 10 ]

210 голосов
/ 15 ноября 2010

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

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

36 голосов
/ 15 ноября 2010

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

29 голосов
/ 15 ноября 2010

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

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

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

int someOtherInt = Convert.ToInt32(someDouble);
7 голосов
/ 15 ноября 2010

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

3 голосов
/ 30 мая 2013

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

Зачем усложнять?

2 голосов
/ 15 ноября 2010

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

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
2 голосов
/ 15 ноября 2010

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

1 голос
/ 20 апреля 2017

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

0 голосов
/ 14 июля 2014
label8.Text = "" + years.ToString("00") + " years";

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

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

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

0 голосов
/ 15 ноября 2010

Мои пути:

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