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


156

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


7
определить «лучший». зависит от того, хотите ли вы округления вверх / вниз и т. д.
RPM1984

8
@ RPM1984: Определите etc.:)
Армен Цирунян

18
@Armen - touche` :) Неважно, в любом случае - Скит здесь, больше ничего не важно.
RPM1984

Ответы:


237

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

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


24
@user: размер intвсегда составляет 32 бита, независимо от того, используете ли вы 32- или 64-битный компьютер.
Джорен

3
И удваивается может быть намного больше, чем даже 64-битный Int.
Адриан Ратнапала

7
Для C # noobs, как я: и Math, и Convert являются частью System. Таким образом, полный ответ выглядит так:intVal = System.Convert.ToInt32(System.Math.Floor(dblVal));
Крис

9
@ user1290746: Это бы сработало, но вы обычно располагали using System;бы верхнюю часть файла, в этот момент это могло бы быть простоintVal = Convert.ToInt32(Math.Floor(dblVal));
Джон Скит

3
@ user1290746: Но в этом случае я не думаю, что правильное решение - советовать людям использовать полностью квалифицированные имена - лучшее решение - узнать о usingдирективах.
Джон Скит

39

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


34

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

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

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

int someOtherInt = Convert.ToInt32(someDouble);

7

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


Это типично небезопасная функция, потому что она принимает все что угодно.
Ant_222

4

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

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


2

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

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



0

Мои способы:

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

11
Тебе не кажется, что третий путь слишком сложный и медленный?
Армен Цирунян

6
Третий не будет работать с двойниками с дробными частями. например,double_value = 0.1
Джефф Меркадо

Я думаю, что вы можете использовать Math.Floor.
lindexi

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

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

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

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.