if (strtofloat(jvedit2.Text) + strtofloat(jvedit3.Text) + strtofloat(jvedit4.Text)) < strtofloat(alis_fiyati.caption) then begin... kodlar... end;
türünden bir kar karşılaştırma deyimi iki bilgisayarda farklı sonuçlar döndürüyor... programı yaptığım bilgisayarda düzgün çalışıyo iken başka bilgisayarda yanlış sonuç döndürüyor... Şöyleki başka bilgisayarda karşılaştırmanın iki tarafı eşit olsa bile bu deyimden sonraki begin end; bloğu çalışıyor... kendi bilgisayarım dışında işyerindeki iki bilgisayarda denedim... İkisindede sonuç aynı.. Böyle bir duruma ne sebep olabilir acaba......
Hayatta iz bırakmak istiyorsan başkalarının ayak izlerine basarak yürüme
Merhaba
Bence hatayı bulmak için karşılaştırmaya konu olan değerleri açıkca görmen gerekir.
programı aşağıdaki şekilde güncelleyerek kendi bilgisayarında ve diğer hata verdiğini söylediğin bilgisayarlarda dene.
a:=strtofloat(jvedit2.Text);
b:=strtofloat(jvedit3.Text);
c:=strtofloat(jvedit4.Text);
d:=strtofloat(alis_fiyati.caption);
showmessage('Karşılaştırma ifadesi:('+floattostr(a)+'+'+floattostr(b)+'+'+floattostr(c)+')<'+floattostr(d));
if (a + b+ c) < d then begin... kodlar... end;
Reel tipteki sayıların bilgisayar belleğinde ikili sayı sisteminde (binary) temsil edilmesi o sayıyı tam olarak ifade edemeyebilir. Milyarda birli hanelerde bazı hatalar olabilir ama bu hatalar çok da önemli değildir ama bu yüzden if şartlarında bu eşitsizlik doğmaktadır. Benim önerim bazı yuvarlamalar ve ihmaller yapmanız gerekecektir.
bende söyledikleriniz uyguluyorum ancak sorunum benim programı yazdığım makine dışında bir makinede benim makinemde çalışan ve hiçbir sorun vermeyen exe sorun veriyor.. iki makineninde bölge ve dil ayarları tamamen aynı.. benim makinemde if şartları düzgün çalışıyor ancak başka makineye kurduğum zaman if şartları hatalı çalışıyor..
Hayatta iz bırakmak istiyorsan başkalarının ayak izlerine basarak yürüme