Double degisken icerigini gostermede yasadigim problem

Başlatan z, 12 Ağustos 2013, 12:38:38

z

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.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

z

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

Bana e^st de diyebilirsiniz.   www.cncdesigner.com

fatih6761


z

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.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

fatih6761

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