перетворити подвійний в Int


156

Який найкращий спосіб перетворити doubleна int? Чи слід використовувати акторський склад?


7
визначити "найкращий". залежить, якщо ви хочете округлення вгору / вниз тощо.
RPM1984

8
@ RPM1984: Визнач etc.:)
Армен Цирунян

18
@Armen - touchche` :) Це все одно не має значення - Скіт тут, більше нічого не має значення.
RPM1984

Відповіді:


237

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

Не забувайте, що дальність дії intнабагато менша, ніж діапазон double. Кидок від , doubleщоб intНЕ згенерує виняток , якщо значення виходить за межі діапазону intв неперевіреною контексті, в той час як заклик до Convert.ToInt32(double)волі. Результат трансляції (у неперевіреному контексті) явно не визначений, якщо значення знаходиться за межами діапазону.


24
@user: Розмір розміру - intце завжди 32 біти, незалежно від того, використовуєте ви 32 або 64-бітну машину.
Жорен

3
А парні можуть бути набагато голоснішими, ніж навіть 64-бітний інт.
Адріан Ратнапала

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

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.