çifte int dönüştürmek


156

Bir dönüştürmek için en iyi yolu nedir doublebir etmek int? Oyuncular kullanılmalı mı?


7
"en iyi" yi tanımlayın. yukarı / aşağı yuvarlama, vb. göre
değişir

8
RPM1984: Tanımla etc.:)
Armen Tsirunyan

18
@Armen - touche` :) Gerçekten önemli değil - Skeet burada, başka hiçbir şeyin önemi yok.
RPM1984

Yanıtlar:


237

Varsayılan kısalma-sıfıra davranışını istiyorsanız bir döküm kullanabilirsiniz. Alternatif olarak, kullanmak isteyebilirsiniz Math.Ceiling, Math.Round, Math.Floorvb - Bunu yaptıktan sonra da bir döküm gerekir rağmen.

Unutmayın ki, aralığı aralığından intçok daha küçüktür double. A dökme doubleiçin intdeğer aralığının dışında ise bir istisna olmayacaktır intdenetlenmeyen bir bağlamda bir çağrı oysa Convert.ToInt32(double)irade. Değer, aralığın dışındaysa, almanın sonucu (denetlenmeyen bir bağlamda) açıkça tanımlanmamıştır.


24
@user: int32 veya 64 bitlik bir makine kullanıyor olmanıza bakılmaksızın, a'nın boyutu her zaman 32 bittir.
Joren

3
Ve çiftler 64 bit int'den bile daha huger olabilir.
Adrian Ratnapala

7
Benim gibi C # noobs için: hem Math hem de Convert Sistemin bir parçasıdır. Yani cevabın tamamı şöyle:intVal = System.Convert.ToInt32(System.Math.Floor(dblVal));
kris

9
@ user1290746: Bu işe yarardı, ancak genellikle using System;dosyanın üst kısmında olurdu , bu noktada olabilirintVal = Convert.ToInt32(Math.Floor(dblVal));
Jon Skeet

3
@ user1290746: Ama bu durumda, doğru çözümün insanlara tam nitelikli adları kullanmalarını tavsiye etmek olduğunu düşünmüyorum - daha iyi çözüm usingyönergeleri öğrenmek .
Jon Skeet

39

Eğer döküm kullanırsanız, yani (int)SomeDoublekesirli kısmı kesersiniz. Yani SomeDouble4.9999 olsaydı sonuç 5 değil 4 olur. İnt değerine dönüştürmek sayıyı yuvarlamaz. Yuvarlama kullanımı istiyorsanızMath.Round


34

Evet neden olmasın?

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

ConvertSınıfı kullanmak da işe yarar.

int someOtherInt = Convert.ToInt32(someDouble);

7

Convert.ToInt32 dönüştürmenin en iyi yolu


Bu genellikle güvenli olmayan bir işlevdir, çünkü her şeyi kabul eder.
Ant_222

4

En iyi yol, Convert.ToInt32 . Hızlıdır ve doğru şekilde yuvarlar.

Neden daha karmaşık hale getirelim?


2

İşte tam bir örnek

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

Sayıyı daha yakın tam sayıya yuvarlamak istiyorsanız aşağıdakileri yapın:

i = (int) Math.Round(x / y); // Line replaced



0

Benim yollarım:

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

11
Üçüncü yolun gereksiz yere karmaşık ve yavaş olduğunu düşünmüyor musunuz?
Armen Tsirunyan

6
Üçüncüsü, kesirli parçaları olan çiftlerle çalışmaz. ör.,double_value = 0.1
Jeff Mercado

Math.Floor'u kullanabileceğinizi düşünüyorum.
lindexi

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

bir etikete veya başka bir şeye göndermek istediğinizde ve herhangi bir kesirli bileşen istemiyorsanız, bu en iyi yoldur

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

sadece 2 ile istiyorsanız ve her zaman böyle

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.