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
yuvarlama sorunu
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
Çözüm burada:
viewtopic.php?t=7964&highlight=bankers
Bu bir sorun değil. Asıl sorun biz yuvarlamayı yanlış biliyoruz.
viewtopic.php?t=7964&highlight=bankers
Bu bir sorun değil. Asıl sorun biz yuvarlamayı yanlış biliyoruz.

kendi programlarımda kullandığım basit bir functionum
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);
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);