İki katı almak için iki tamsayıyı nasıl bölebilirim?


282

İki katı almak için iki tamsayıyı nasıl bölerim?


10
Bunun bir röportajda sorulduğu varsayıldığında - tamsayı bölümü her zaman tamsayı ile sonuçlanır. Aşağıda gösterilenler gibi bir döküm türü kullanmalısınız.
Mart'ta Sesh

2
Bölünmeler farklı tipleri: Tamsayı, noktalı Yüzer, Ondalık içinde -discussed c # dönüşlerinde Neden tamsayı bölme bir tamsayı ama bir şamandıra?
Michael Freidgeim

Yanıtlar:


460

Sayıları yayınlamak istiyorsunuz:

double num3 = (double)num1/(double)num2;

Not: C # 'daki bağımsız değişkenlerden herhangi biri a ise double, a doubleile sonuçlanan bir bölme kullanılır double. Yani, aşağıdakiler de işe yarar:

double num3 = (double)num1/num2;

Daha fazla bilgi için, bkz:

Nokta Net Perls


3
Bunun C # 'da aynı olup olmadığını bilmiyorum, ancak C sadece ilkini almanızı gerektirir - otomatik olarak double / int'i bir double yapar.
paxdiablo

4
@Pax, C veya C # 'daki bağımsız değişkenlerden biri çift ise, çift bölme kullanılır (çiftle sonuçlanır).
Strager

32
Bunu yapmamaya dikkat edin: - double num3 = (double)(num1/num2);. Bu size tamsayı bölümünün sonucunu iki kez gösterecektir!
Yalnız Kodlayıcı

Ekstra hassasiyete ihtiyacınız olmadığını varsayalım, doublebunun yerine döküm yapmak için bir neden var floatmı? Sorunun çağrıldığını görebiliyorum doubleama yine de merak ediyorum.
Kyle Delaney

Normalde kullanmak C # @KyleDelaney Hemen nedeni doubledeğil float. Aynen bir değişken yazdığınızda var a = 1.0;, bu 1.0 her zaman bir double. Sanırım ana nedeni bu.
this.myself

31

@ NoahD'nin cevabını tamamlıyor

Daha yüksek bir hassasiyete sahip olmak için ondalık sayıya yayın yapabilirsiniz:

(decimal)100/863
//0.1158748551564310544611819235

Veya:

Decimal.Divide(100, 863)
//0.1158748551564310544611819235

Ondalık 128 kullanırken, 64 bit ayıran çift temsil edilir

(double)100/863
//0.11587485515643106

"Hassasiyet" in derinlemesine açıklaması

Kayan nokta ikili temsil ve duyarlığı hakkında daha fazla ayrıntı için bir göz atın , bu makalenin konuştuğu yerde Jon Skeet gelen floatsve doublesve bu bir o bahsediyor decimals.


2
Yanlış! double53 bit hassasiyete sahiptir ve ikili kayan nokta biçimidir, oysa 96decimal ondalık kesinlik ile ... ondalık biçimdir . Yani double~ 15-17 ondalık basamak ve ondalık 28-29 basamak (ve iki katı hassasiyet double) kesin . Daha da önemlisi decimal128 bitin sadece 102'sini kullanıyor
phuclv

Teşekkürler @phuclv, bunu düzelttim. "Alan tahsisi" demek istedim. Sen hassasiyeti konusunda haklıydın decimals(96), fakat doublessahip mantis 52 bit değil 53
fabriciorissetto

1
evet, mantis 52 bit var, ama hala gizli bir bit var, bu da 53 bitlik bir anlamla sonuçlanıyor. Kayan nokta hassasiyeti 52 veya 53 bit mi?
phuclv

Decimal.Divide harikaydı! Teşekkürler
Ricardo G Saraiva

10

tamsayıları ikiye katlar.


Spesifik olmak gerekirse, bir tamsayıyı iki katına çıkarabilirsiniz: (çift) myIntegerValue
Whiplash

5

Bunlardan birini önce bir çifte dönüştürün. Bu form birçok dilde çalışır:

 real_result = (int_numerator + 0.0) / int_denominator

1
Daha kolay yapmak ...var result = 1.0 * a / b;
Temel

@Temel yapmanın 100 yolu var. Döküm hala daha hızlı olmasına rağmen, daha hızlı olduğu için eklemeyi tercih ediyorum.
Mark Ransom

1
var firstNumber=5000,
secondeNumber=37;

var decimalResult = decimal.Divide(firstNumber,secondeNumber);

Console.WriteLine(decimalResult );

1
Sorusu için çağrı görünüyor doubledeğil decimal.
Kyle Delaney
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.