daha önce değişkenlerin yaptığı azizliği gene yazmıştım. bunlar rahat durmuyor gene beni uğraştırıyor. Bu seferde double olarak tanımladığım değişkenlere textlerdeki float sayıları strtofloat ile atınca hiç bir problem gözükmüyor(debug ekranında değişken değerleri normal). Ama bu değişkene trunc yada int fonksiyonu yapıp tam kısmını almak istediğimde değişken tam sayı olarak gözükmesine rağmen bir aşağı yuvarlıyor.
örnek:
j:=5;
i:=int(j) //i'nin değeri 4 çıkıyor.
tabiki değeri elimle yazarsam problem yok. textlerden aktarınca böyle oluyor. sanki aktarılan sayı 4,9999999999999999999999 gibi davranıyor. dediğim gibi debug ekranında mouse ile üzerine geldiğimde 5 olarak görüyorum. değişken tipini extended yapınca düzeldi tabi. bu gidişle C 'ye geçecem. madem kullanamıyorum neden bu veri tipleri var? insan bir hata mesajı verir değilmi?
Anlattım rahatladım. Herkese iyi çalışmalar.
nedir bu değişkenlerden çekdiğim :(
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
Yukarıdaki mesajı yazdıktan sonra hatanın yarısının giredildiğini fark ettim. Problemim hala devam ediyor. En iyisi gidip biraz uyuyayim. İşe yarayabilir
sabah ola hayrola.

Kod: Tümünü seç
var
i,j,k:integer;
a,b,c,d:extended;
temp:string;
begin
temp := '';
a:=strtofloat(tx_uremes.text);
b:=strtofloat(tx_uremei.text);
c:=strtofloat(tx_uremea.text);
d:=(a-b)/c;
if int(d) <> abs(d) then //debug ekranında d'nin değeri tam sayı görüyorum ama delphi burada int(d) farklıdır abs(d) diyor.
temp:='Üreme';
- Merhaba...
- Gerçekten takıldığın yerde ara vermek genellikle işe yarar. Düşen kod yazma performansını eski haline getirir..
- Yukarda verdiğin örnekte bir hatan, yanlış uygulaman var...
Böyle şüphelendiğin durumlarda, aşağıdaki yazdığım türden bir deneme yap ve sonucu gözlemle... Bence J değerini Textlerden de aldırsan yazdığın gibi direkt 5 vermiyorsundur, bir yerlerden 4,99 gibi bir değer alıyorsundur...
Sonuç
- Verdiğin koda hem de Double olarak uyarlarsak da aynısı...
Sonuç
- ABS ve INT Fonksiyonların işlevleri farklıdır. ABS (-) yada (+) olan sonucu daima + olarak verir.. Yuvarlama ile ilişkisi yoktur. Sanıyorum başka biriyle karıştırdın...
- İşlevlerini test ederek görmek en güzeli. Aşağıdaki kodu bir buton altına yapıştır, farkı gör, dilediğini kullan..
- Sonuç şu şekilde ;
- Gerçekten takıldığın yerde ara vermek genellikle işe yarar. Düşen kod yazma performansını eski haline getirir..

- Yukarda verdiğin örnekte bir hatan, yanlış uygulaman var...

Kod: Tümünü seç
Var
Str : String;
I, J:Real;
begin
Str := '5';
J := StrToFloat(Str);
I := Int(J);
ShowMessageFmt('%f', [I]);
end;
Kod: Tümünü seç
5,00
Kod: Tümünü seç
var
i, j, k : integer;
a,b,c,d : double;
begin
a:=strtofloat('20');
b:=strtofloat('10');
c:=strtofloat('2');
d:=(a-b)/c;
ShowMessageFmt('%f', [d]);
end;
Kod: Tümünü seç
5,00
- İşlevlerini test ederek görmek en güzeli. Aşağıdaki kodu bir buton altına yapıştır, farkı gör, dilediğini kullan..
Kod: Tümünü seç
ShowMessageFmt('Değer = %f'#13'Int = %f'#13'Frac = %f'#13'Abs = %f'#13'Trunc = %d'#13'Round = %d', [(-4.99), Int(-4.99), Frac(-4.99), Abs(-4.99), Trunc(-4.99), Round(-4.99)]);
Kod: Tümünü seç
Değer = -4,99
Int = -4,00
Frac = -0,99
Abs = 4,99
Trunc = -4
Round = -5
çok teşekkürler ben abs ve int fonksiyonunu if yapısı ile karşılaştırıyorum çünkü bölme işleminin kalansız olup olmadığını öğrenmem gerekiyor. abs ise eğer negatif bir sonuç varsa yine hata versin diye koydum. aslında textlerden her zaman 1 ile 0 arasında bir sayı geliyor. bölme işlemi sonucu bir integer çıkmasını bekliyorum. nteger değilse hata verecek. mod komutu burda çok işime yarardı ama değerler integer değil. değerleri 1000000 gibi bir sayıyla çarpıp mod almayı deneyeceğim.
- Zaten bu açıklamayı yapmasan söyleyeceğim ilk şey, "işaret değişikliği yapmanın ne anlamı var... Sonuç negatif olursa kesinlikle ve isteyerek durumu aleyhine dönüştürmüş oluyorsun" olurdu...
- Bu kadar real ortamda hala sorununu çözemediysen, tam olarak ne yapmak istediğini söylersen yardımcı olmaya çalışırız...
- Yoksa çalışmalarında başarılar...

- Bu kadar real ortamda hala sorununu çözemediysen, tam olarak ne yapmak istediğini söylersen yardımcı olmaya çalışırız...

- Yoksa çalışmalarında başarılar...
