yuvarlama sorunu

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
feride
Üye
Mesajlar: 11
Kayıt: 21 Oca 2004 04:49
İletişim:

yuvarlama sorunu

Mesaj gönderen feride »

merhaba arkadaşlar

var
r:string;
x:double;
begin
x:=7.09;
r :=FormatFloat('###.00',(( x- 6.5)/2 + 3.5));
showmessage(r);
end;

yukarıdaki program 3.795 değerini 3.80 yapması gerekirken malesef 3.79 donduruyor.
x yerine 7.09 değerini yazdığımda ise tam sonucu döndürüyor.
sorun neden kaynaklanıyor.
yardımlarınızı bekliyorum
fduman
Moderator
Mesajlar: 2749
Kayıt: 17 Ara 2004 12:02
Konum: Ankara

Mesaj gönderen fduman »

Çözüm burada:

viewtopic.php?t=7964&highlight=bankers

Bu bir sorun değil. Asıl sorun biz yuvarlamayı yanlış biliyoruz. :!:
danaci
Üye
Mesajlar: 178
Kayıt: 24 May 2005 01:45

kendi programlarımda kullandığım basit bir functionum

Mesaj gönderen danaci »

function yuv(sayi:extended):double;
var
yer:byte;
v_kadar,v_sonra_uc,
v_sonra_iki:string;
durum:integer;
vs:real;
begin
yer:=pos(',',floatTostr(sayi));
if yer>0 then
begin
//virgüle kadarki kısım
v_kadar:=copy(floatTostr(sayi),1,yer-1);

//virgülden sonraki 3 basamak
v_sonra_uc:=copy(floatToStr(sayi),yer+1,3);
if length(v_sonra_uc)=1 then
begin
v_sonra_uc:= v_sonra_uc + '00';
end;

if length(v_sonra_uc)=2 then
begin
v_sonra_uc:= v_sonra_uc + '0';
end;

//virgülden sonraki 2 basamak
v_sonra_iki:=copy(floatToStr(sayi),yer+1,2);

if length(v_sonra_iki)=1 then
begin
v_sonra_iki:= v_sonra_iki + '0';
end;


durum:=strToInt(v_sonra_uc) - (strToInt(v_sonra_iki)*10);
if durum >4 then
begin
vs:=0;
vs:=(strToInt(v_sonra_iki)+1)/100;
yuv:=strToInt(v_kadar)+vs;
end;
if durum <5 then
begin
vs:=0;
vs:=strToInt(v_sonra_iki)/100;
yuv:=strToInt(v_kadar)+vs;
end;
end
else
begin
yuv:=strToInt(floattostr(sayi));
end;
end;


kullanımı ise

dm1.yazici_dbservis_tutari.Value:=yuv(dm1.yazici_dbservis_tutari.Value);
Cevapla