convert double ke int

156

Apa cara terbaik untuk mengonversi a doublemenjadi int? Haruskah gips digunakan?

pengguna496949
sumber
7
mendefinisikan "terbaik". tergantung jika Anda ingin pembulatan atas / bawah, dll.
RPM1984
8
@ RPM1984: Define etc.:)
Armen Tsirunyan
18
@Armen - touche` :) Tidak masalah kok - Skeet ada di sini, tidak ada yang penting.
RPM1984

Jawaban:

237

Anda dapat menggunakan gips jika Anda ingin perilaku truncate-zero-zero default. Atau, Anda mungkin ingin menggunakan Math.Ceiling, Math.Round, Math.Floordll - meskipun Anda masih perlu gips setelah itu.

Jangan lupa bahwa rentang intjauh lebih kecil daripada kisaran double. Para pemain dari doubleke inttidak akan melempar pengecualian jika nilainya di luar rentang intdalam konteks yang tidak dicentang, sedangkan panggilan ke Convert.ToInt32(double)akan. Hasil pemeran (dalam konteks yang tidak dicentang) secara eksplisit tidak terdefinisi jika nilainya di luar kisaran.

Jon Skeet
sumber
24
@ pengguna: Ukuran dari intselalu 32 bit, terlepas dari apakah Anda menggunakan mesin 32 atau 64 bit.
Joren
3
Dan ganda bisa jauh lebih erat daripada int 64 bit.
Adrian Ratnapala
7
Untuk C # noobs seperti saya: baik Matematika maupun Konversi adalah bagian dari Sistem. Jadi jawaban lengkapnya terlihat seperti ini:intVal = System.Convert.ToInt32(System.Math.Floor(dblVal));
Keris
9
@ user1290746: Itu akan berhasil, tetapi Anda biasanya hanya memiliki using System;di bagian atas file, pada titik mana itu bisa sajaintVal = Convert.ToInt32(Math.Floor(dblVal));
Jon Skeet
3
@ user1290746: Tetapi dalam kasus itu, saya tidak berpikir solusi yang tepat adalah menasihati orang untuk menggunakan nama yang sepenuhnya memenuhi syarat - solusi yang lebih baik adalah belajar tentang usingarahan.
Jon Skeet
39

jika Anda menggunakan gips, yaitu, (int)SomeDoubleAnda akan memotong bagian fraksional. Artinya, jika SomeDouble4.9999 hasilnya akan menjadi 4, bukan 5. Konversi ke int tidak membulatkan angka. Jika Anda ingin menggunakan pembulatanMath.Round

Armen Tsirunyan
sumber
34

Ya kenapa tidak?

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

Menggunakan Convertkelas juga berfungsi dengan baik.

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

Convert.ToInt32 adalah cara terbaik untuk mengkonversi

anishMarokey
sumber
Ini fungsi yang biasanya tidak aman karena hanya menerima apa saja.
Ant_222
4

Cara terbaik adalah dengan menggunakan Convert.ToInt32. Ini cepat dan juga putaran dengan benar.

Mengapa membuatnya lebih rumit?

Majed
sumber
2

Ini adalah contoh lengkapnya

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); 
  }    
}

Jika Anda ingin membulatkan angka ke integer yang lebih dekat lakukan hal berikut:

i = (int) Math.Round(x / y); // Line replaced
mariana lebih lembut
sumber
1

Saya pikir cara terbaik adalah Convert.ToInt32.

Singleton
sumber
1

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

mathewsun
sumber
0

Cara saya adalah:

 - Convert.ToInt32(double_value)
 - (int)double_value
 - Int32.Parse(double_value.ToString());
kst
sumber
11
Tidakkah menurut Anda cara ketiga rumit dan tidak perlu?
Armen Tsirunyan
6
Yang ketiga tidak akan bekerja dengan ganda dengan bagian fraksional. mis.,double_value = 0.1
Jeff Mercado
Saya pikir kamu bisa menggunakan Math.Floor.
lindexi
0
label8.Text = "" + years.ToString("00") + " years";

ketika Anda ingin mengirimkannya ke label, atau sesuatu, dan Anda tidak ingin komponen fraksional, ini adalah cara terbaik

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

jika Anda ingin dengan hanya 2, dan selalu seperti itu

Ruth
sumber