it-swarm.com.ru

конвертировать двойной в int

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

130
user496949

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

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

209
Jon Skeet

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

36
Armen Tsirunyan

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

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

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

int someOtherInt = Convert.ToInt32(someDouble);
29
Jeff Mercado

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

7
anishMarokey

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

Зачем делать это сложнее?

3
majed

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

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
mariana soffer

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

2
Singleton

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

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

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

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

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

0
Ruth

Мои способы:

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