Java örneklerimize devam ediyoruz. Bugün sıklıkla yapılan bir hataya ve nasıl düzeltilebileceğine değinerek başlamak istedim. Bir tamsayı başka bir tamsayıya bölündüğünde küsüratı kaybolur, üstelik double bir değişkene atansa bile. Örnek üzerinden anlamak için şöyle bir kod yazalım:
Örnek 1: Çıktı alırken içeride ek değişken kullanmadan bölümü yapalım.
int a=3;
int b=2;
System.out.println(a/b);
Çıktı: 1
Örnek 2: Bölümü bir tamsayı c değişkenine tanımlayalım
int a=3;
int b=2;
int c=a/b;
System.out.println(c);
Çıktı: 1
Örnek 3: Bölümü double veri türünde bir c değişkenine tanımlayalım.
int a=3;
int b=2;
double c=a/b;
System.out.println(c);
Çıktı: 1.0
Örnek 4: Değişken kullanmadan direk olarak bölüm yapalım
System.out.println(3/2);
Çıktı: 1
Demek ki bir tamsayıyı başka bir tamsayıya bölünce ne yaparsak yapalım küsüratını kurtaramıyormuşuz. Peki nerede yanlış yapıyoruz ya da bu bölüm işlemini nasıl yapmamız gerekirdi? Cevap şu:
Bölüm işlemlerinde hem pay hem de payda int veri türünde olmamalıdır. En az birisi (pay, payda ya da her ikisi birden) double gibi küsürat tutan bir veri türüne dönüştürülürse (casting) ya da en başından bu şekilde tanımlanırsa bu problemle hiç karşılaşılmamış olur.
Örnek 5:
int a=3;
int b=2;
System.out.println((double)a/b); //pay yerine payda ya da her ikisi de cast edilebilirdi
Çıktı: 1.5
Örnek 6:
int a=3;
int b=2;
double c=a/(double)b;
System.out.println(c);
Çıktı: 1.5
Örnek 7:
System.out.println(3/2); // int/int -->1
System.out.println(3.0/2); // double/int -->1.5
System.out.println(3/2.0);// int/double -->1.5
System.out.println(3.0/2.0);// double/double -->1.5
Çıktı:
1
1.5
1.5
1.5
Son örnekte olduğu gibi değişken olarak tanımlanmamış bölüm işlemlerinde sayının sağ tarafına nokta sıfır (2.0 gibi) eklenerek tamsayı/tamsayı problemi yine aşılabilir.