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
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
olduğunu. Bunu yapabilirdi:
float ans = (i/3.0f);
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;
Bu tamsayı bölme yapıyor. Bu deneyin:
float ans = ((float)i/3.0f);
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.
Çok basit: C#, int/int = int.
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))
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.
Uygun MSDN sayfasına bağlantı için +1 bonus. –
Bunun için çok teşekkürler - ama neden "f" sayıyı farklı kılıyor? –
@ 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