2011-01-03 18 views
5
aptal şeyler yapıyor olmalı

:Basit bölünme

float ans = (i/3); 

Peki neden i = 7 ans 2.0 de çıkarken?

i iki işlenen tam sayı ise / operator bir tamsayı bölme işleminin uygulanmasıdır da ondan bir int

cevap

11

olduğunu. Bunu yapabilirdi:

float ans = (i/3.0f); 
+1

Uygun MSDN sayfasına bağlantı için +1 bonus. –

+0

Bunun için çok teşekkürler - ama neden "f" sayıyı farklı kılıyor? –

+2

@ m.edmondson: Sayısal son ekler, derleyici için belirli bir tür olarak bir sayının işlem görmesi gereken ipuçlarıdır. Bu (float) 3.0' için shorthand var – Tony

6

aksi halde hesaplama ilk (her zaman bir tamsayı sonuçlanır), bir şamandıra sonucu dönüştürmeden önce tamsayılar ile yapılır, işlenen bir şamandıra birini yapmak gerekir. i bir int ve 3 bir int olduğunu çünkü

float ans = ((float) i)/3; 
0

Bu tamsayı bölme yapıyor. Bu deneyin:

float ans = ((float)i/3.0f); 
0

kullanım float ans = (i/3.0) veya float ans = (i/3f) veya float ans = ((float)i/3). /, her iki tarafın da tamsayı olması durumunda bir tamsayı bölümü yapar.

0

Çok basit: C#, int/int = int.

0

Ne aradığınız geçerli:

float ans = ((float)i/3); 

Aksi takdirde iki tamsayılar alıp bölen bölünen sayıya gider bütün sayısını bulmalarını bölüyorlar. (Belirtildiği gibi, int/int = int hedef türünden bağımsız olarak. Ve, derleyici için, "3" başka bir tamsayıdır ( 3.0f olarak belirtmediğiniz sürece))

0

Bunu bir bir çeşit döngü. I değişkeninizi bunun yerine bir süzgeç olarak belirtebilirsiniz.

for (float i = 0; i < 10; i++) 
{ 
    float ans = (i/3); 
    // statements 
} 

Sadece başka bir çözüm.