Division by zero hatası

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
DotCom
Kıdemli Üye
Mesajlar: 1696
Kayıt: 11 Tem 2003 10:30
Konum: İzmir
İletişim:

Mesaj gönderen DotCom »

m_dak.Field.value:=(devir.Field.value / bukum.Field.value)*1000;

bu işini görür.
Kullanıcı avatarı
mussimsek
Admin
Mesajlar: 7602
Kayıt: 10 Haz 2003 12:26
Konum: İstanbul
İletişim:

Mesaj gönderen mussimsek »

if bukum.Field.AsFloat > 0 then
m_dak.Field.AsFloat:=(devir.Field.AsFloat / bukum.Field.AsFloat)*1000;

Kolay gelsin.
Kullanıcı avatarı
freeman35
Admin
Mesajlar: 2380
Kayıt: 12 Haz 2003 04:05
Konum: merkez camii yanı

Mesaj gönderen freeman35 »

try
m_dak.Field.AsFloat:=(devir.Field.AsFloat / bukum.Field.AsFloat)*1000;
except
m_dak.Field.AsFloat:= 0.0;
end;

kolay gele
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ı
Kuri_YJ
Moderator
Mesajlar: 2248
Kayıt: 06 Ağu 2003 12:07
Konum: İstanbul
İletişim:

Mesaj gönderen Kuri_YJ »

Selamlar,

İlginç bir mantıktan bahsedeyim :)

Dikkat bu mantık ancak kaba hesaplamalar yapılırken kullanılabilir aksi takdirde hataya yol açar bu sebeple dikkatli kullanılmalıdır.


A = B / (C + 0.0000000001)

Sizin örneğinize göre

Kod: Tümünü seç

m_dak.Field.AsFloat:=(devir.Field.AsFloat / (bukum.Field.AsFloat + 0.0000000001)*1000; 
şeklinde olabilir.

Burada her ne olursa olsun 0'a bölme hatası almazsınız ancak hesaplamalarınızda milyarda bir hataya yol açar. Bu hatayı da görmezden gelebilecek kadar kaba bir hesap ise kullanabilirsiniz.

Bu tip bir uygulamayı ben Interbase/FireBird'de yapıyorum Select'de bir hesaplamalı Query çekersen eğer değer 0 (Sıfır) ise Query patlıyor bunun önüne geçebilmek için böyle bir hinlik yaptımdı :)

Ancak tekrar hatırlatıyorum. Hassasiyetinize bağlı olarak bu yöntemi kullanıp kullanmamak elinizde. Hatta Milyarda bir değil Trilyonda bir gibi bir hata payına veya daha düşük seviyelere de çekmek elinizde :)

Bu aslında biraz sabunlama yöntem sınıfında ama sonuç eğer etkilenmiyorsa kullanılabilir. :)

Herkese kolay gelsin.
Kuri Yalnız Jedi
Harbi Özgürlük İçin Pisi http://www.pisilinux.org/
Kullanıcı avatarı
Kuri_YJ
Moderator
Mesajlar: 2248
Kayıt: 06 Ağu 2003 12:07
Konum: İstanbul
İletişim:

Mesaj gönderen Kuri_YJ »

Tekrar Selam,

kodda bir hata var :roll: (parantez hatası düzeltiyorum,

Kod: Tümünü seç

m_dak.Field.AsFloat:=(devir.Field.AsFloat / (bukum.Field.AsFloat + 0.0000000001))*1000; 
Pardon :) ehi ehi ehiii :lol:
Kuri Yalnız Jedi
Harbi Özgürlük İçin Pisi http://www.pisilinux.org/
Kullanıcı avatarı
freeman35
Admin
Mesajlar: 2380
Kayıt: 12 Haz 2003 04:05
Konum: merkez camii yanı

Mesaj gönderen freeman35 »

walla helal olsun :lol: tam TÜRK işi. Bende bööle 1-2 AliCengiz oyunu yapmıştım :lol:
Kolay gele
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 !!!
Cevapla