Float alan karşılaştırmada sorun

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
adelphiforumz
Üye
Mesajlar: 602
Kayıt: 01 Nis 2008 05:38
Konum: İstanbul

Float alan karşılaştırmada sorun

Mesaj gönderen adelphiforumz »

Selamlar

dxmemtable içerisinde ftfloat olarak bir alan açıyorum
açtığım alana (alan = 0.01) olarak değer atıyorum
daha sonra bu alanı
if memtable.fieldbyname(alan).asfloat = 0.01 yada
if memtablealanadi.asFloat = 0.01 dediğimde doğruluk sağlanmıyor
fakat
if StrToFloat(FloatToStr(memtablealanadi.asFloat)) = StrToFloat(FloatToStr(0.01)) dersem doğruluk sağlanıyor
sizce sorun ne olabilir.

iyi çalışmalar
Ehil olmayanlara sabretmek ehil olanları parlatır.
Akıllı birisinden gelen cefa, bilgisizlerin vefasından iyidir.
Bilgiye ulaştı mı ayak, kanat olur
Biz insanı kıyafetiyle ağırlar bilgisiyle uğurlarız.
Mevlana
ertank
Kıdemli Üye
Mesajlar: 1657
Kayıt: 12 Eyl 2015 12:45

Re: Float alan karşılaştırmada sorun

Mesaj gönderen ertank »

Merhaba,

dxmemtable ile ilgili internette pek kaynak bulamadım. İlgili sayfa linki verebilir misiniz?

Test açısından aşağıdaki durumda doğruluk sağlanıyor mu acaba?

Kod: Tümünü seç

if StrToFloat(FloatToStr(memtablealanadi.asFloat)) = 0.01 then ShowMessage('evet') else ShowMessage('hayır');
Kullanıcı avatarı
freeman35
Admin
Mesajlar: 2357
Kayıt: 12 Haz 2003 04:05
Konum: merkez camii yanı

Re: Float alan karşılaştırmada sorun

Mesaj gönderen freeman35 »

.asfloat değeri kontrol ettin mi? yani 0.01 den sonra yani 0.010000000008 gibi bir değer geliyor olabilir. ayrıca sabit bir değer yani '0.01' ile karşılaştıracaksan, .Asstring ile karşılaştırabilirsin. TField çeviriyi yapıyorken, benim alanım float illaki asfloat ile erişirim demeyin.
ZAGOR TENAY TÜRK'tür... TÜRK kalacak...
Zoru başarırım, İmkansız zaman alır
FreeMan 35.5

Soru sormaya üşenmiyorsan, sorunun çözümünü yazmaya da üşenme !!!
Kullanıcı avatarı
sabanakman
Kıdemli Üye
Mesajlar: 3077
Kayıt: 17 Nis 2006 08:11
Konum: Ah bi Antalya olaydı keşke (Ankara)

Re: Float alan karşılaştırmada sorun

Mesaj gönderen sabanakman »

Real tipli ondalıklı sayı tiplerinde derinlerde bir yerde genellikle fark meydana gelmektedir. Bu gibi durumlarda bir yerden sonrasını ihmal etmekte fayda vardır. Mesela Currency tipinde bu iş otomatik olarak ondalıklı kısımdan 5-6 haneden sonrasını yuvarlamakta veya atmaktadır. O yüzden Currency tipli değişkene sonuç hesaplatıp, kıyaslamayı bunun üzerinden yapabilirsiniz.

Kod: Tümünü seç

var cVal:Currency;
begin
...
...
...
   cVal:=memtable.fieldbyname(alan).asfloat-0.01;
  if cVal=0 then ShowMessage('evet') else ShowMessage('hayır');
end;
Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .
Cevapla