Kayar noktali sayilarin degerini ekranda gostermek icin kullandigim donusum fonksiyonlari hatali calisiyor.
Pi sayisini N double degiskeni icindeyken
number = (NSDecimalNumber *) [NSDecimalNumber numberWithDouble:N];
3.14............89793792 seklinde.
Pi sayisini boyle değil de V=[NSString stringWithFormat:@"%0.18lf", N]; ile stringe cevirirsem (f yafa lf kullanmam onemli değil)
bu kez 3.14...........89793116 olarak donusuyor.
Haydi bu kabul edilebilir diyelim.
N= 10 uzeri 99 sayisi
ilk komutla 1000000000000819200000000000 devaminda 0 lar olan sekilde
ikinci komutla gosterirken ise 99999999999999999996733616884 ve devami seklinde sonuc uretiyor.
Mantis icin 12 digit exponent icin de 2 digit toplam 14 digit gostergem var. N double degiskeni icindeki degeri bu gostergede gostermem gerekiyor.
Nerede hata yapiyorum?
En son care double dan stringe donusum yapan fonksiyonu kendim yazacagim. Cunku hazirdaki fonksiyonlar hata yapiyor gibime geldi.
Her ne kadar IOS daki C biraz farkli olsa da sorum klasik C sorusu olarak ele alinabilir.
V=[NSString stringWithFormat:@"%.10e", N]; ile istedigime en yakin sonucu elde ettim.
Fakat bu gosterim seklinde 1/3 sonucu 3.33333333 10^-1 seklinde oluyor.
Halbuki sonucun 0.3333333333 seklinde olmasini isterim.
Gene 100/3 sonucu 3.33333333 10^1 cikarken sonucun 33.333333 olmasini isterim.
Bunun icin %e parametresinde ne gibi degisiklikler yapmam gerekir? Yoksa kod mu yazmam gerekecek?
mesaj birleştirme:: 12 Ağustos 2013, 16:37:25
Hesap makinesi ile asagidaki islemleri yaptigimda ekrandaki gorunen sonuclar;
1000/3=333.3333333....
100/3=33.3333333....
10/3=3.3333333....
1/3=0.3333333....
0.1/3=0.03333.....
0.01/3=3.33333E-3
0.001/3=3.33333E-4
Bu sonuclara bakarak, bu gosterim icin C nin float to string benzeri standart fonksiyonlarinin kullanilmadigini soyleyebilirmiyiz?
C de %e ile string olusturursam elde ettigim sonuclar asagidaki gibi
1000/3=3.333333... E2
100/3=3.333333... E1
10/3=3.333333...
1/3=3.33333...E-1
0.1/3=3.33333...E-2
0.01/3=3.33333...E-3
@z hocam e yerine %g deneyebilir misiniz?
Hocam evet dediginiz gibi %.10e yerine %.10g kullaninca istedigim gosterime en yakin sonuclar olustu.
Bu kez de Casio 0.0001/3= icin 3.33333 E-4 verirken %g ile sonuc 0.00033333 oldu fakat simdilik buna razi olacagim artik.
Aksi takdirde display icin ozel rutin yazmam gerekecek. Casio'nun gosterimini sevdigim icin bu konunun uzerinde bu kadar duruyorum.
Tesekkkurler.
Rica ederim hocam. Bu kadar çok istiyorsanız kendi fonksiyonunuzu yazmakta çok zor değil.
Hatta basit bir if-else ile halledebilirsiniz. IF exp > 7 veya < -7 ise %f kullan ELSE %e kullan gibi...