convert double ke int


156

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


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.


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


34

Ya kenapa tidak?

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

Menggunakan Convertkelas juga berfungsi dengan baik.

int someOtherInt = Convert.ToInt32(someDouble);

7

Convert.ToInt32 adalah cara terbaik untuk mengkonversi


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?


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



0

Cara saya adalah:

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

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

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.