İ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.