herkeze sağlıklı, mutlu, hayırlı yıllar
sistem
d2006
zeos
firebird.1.5.5 aslında farketmiyor mysql dede, postgre dede aynı hata var
zeos tan veya Tdataset ten olabilir?
hata veren alan tipleri veri tabanında numeric(18,4);
miktar*birim_fiyat=tutar hesaplamasında
bazı degerlerde tutar
mesala 2.22 gibi bir değer çıkması gerekirken
2.2254 gibi bir değer çıkıyor
ytl yuvarlaması yapıyorsun ama
fieldbyname('TUTAR').asFloat=2.22 gösteriyor
dataya yazarken bunu 2.2254 yapıyor
genelde bu hatayı 20 kayıtda bir büyük rakamlarda yapıyor
sonuçta yüzdelik hane 6-8 hane olabiliyor ama yuvarlama ile bu gideriliyor
sana gösterdigi ve veya başka bir değişkene aktarıldığındada dogru sonuç veriyor
ama dataya yazarken 2 hane yerine 4 hane yazıyor
RoundTo(x,-2);
SimpleRoundTo(x,-2); işe yaramıyor
yuvarlama functionu bu sekilde
degerler extended;
Gelen_Ye:=Gelen;
Result:=Gelen_Ye;
Kullanilan := Frac(Gelen);
if Length(FloatToStr(Kullanilan)) > 4 then
begin
Fark:=(Frac(Kullanilan * 100) / 100);
Gelen_Ye := Gelen_Ye - Fark;
a:=0;
try
a := StrtoInt(Copy(Floattostr(Kullanilan),5,1));
except
end;
//a := Kullanilan/100;
//if a >= 0.5 then Gelen_Ye := Gelen_Ye + 0.01;
if a >= 5 then
Gelen_Ye := Gelen_Ye + 0.01;
Result:=Gelen_Ye;
end;
{
bu tarz şeylerde işe yaramıyor
Temp1:='';
Temp2:='';
Temp1:=FloatToStr(Result);
if Pos(',',Temp1)>0 then
begin
Temp2:=Trim(Copy(Temp1,Pos(',',Temp1)+1,2));
Temp1:=Trim(Copy(Temp1,1,Pos(',',Temp1)-1));
Result:=StrToFloat(Temp1+','+Temp2);
end
else
Result:=StrToFloat(Temp1);
}
örnek degerler
1758713,9*
1626094,61=2859835193322,079
yuvarladıgımızda 2859835193322,08
datada 2859835193322,0796
554.270,3802*
1.230.910,93=682.257.469.163,435586
yuvarladıgımızda 682.257.469.163,44 oluyor ama dataya yazdıktan sonra
deger 682.257.469.163,4402
1.380.010,7691*
474.565,36=
654905307441,8102
654905307441,82 olması gerekiyor
1626800,4045
1551543,33
2524051316843,2796
RoundTo(x,-2);
SimpleRoundTo(x,-2); işe yaramıyor
bir çözümü varmıdır böyle bir bug varmı delphide
dataset float yuvarlama hatası
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
iyide üstad alan zaten 18 4.. yani 18 ana ve 4 hane küsurat için . ki üstelik bence 4 yetmez 5 lazım.
kur programında isvec kronu küsurat 5 hane olmadığı için sorun çıkmıştı. rakam buyuk olunca hata 30-40 ytl yi buluyordu..
bu bug filan değil. rakam ne olursa olsun vt de uzantı 4 hane olacaktır. en fazla rakamı str yapar son iki haneyi 0 yapar geri rakama cevirir öyle yaparsın.
kur programında isvec kronu küsurat 5 hane olmadığı için sorun çıkmıştı. rakam buyuk olunca hata 30-40 ytl yi buluyordu..
bu bug filan değil. rakam ne olursa olsun vt de uzantı 4 hane olacaktır. en fazla rakamı str yapar son iki haneyi 0 yapar geri rakama cevirir öyle yaparsın.
Kişi odur ki, koyar dünyada bir eser. Eseri olmayanın yerinde yeller eser./Muhammed Hadimi
http://www.ibrahimkutluay.net
http://www.ibrahimkutluay.net/blog
http://www.ibrahimkutluay.net
http://www.ibrahimkutluay.net/blog
- White Rose
- Üye
- Mesajlar: 726
- Kayıt: 06 Tem 2005 09:41
- Konum: Güneyden
- İletişim:
Merhaba bu öneri için YTL için sorunu çözsede diğer para birimleri için büyük hataya yol açaçacaktır. en uygunu vt ye ne ise kaydeder ekranda ona uygun bir şekilde yuvarlayıp gösterir. YTL ise YTL yuvarlaması yapar diğeri ise normal yuvarlama yeterli zatenWhite Rose yazdı:siz veritabanında bunu numeric(18,4) olarak tanımlamışsınız o zaman
numeric(18,2) yapın
Kişi odur ki, koyar dünyada bir eser. Eseri olmayanın yerinde yeller eser./Muhammed Hadimi
http://www.ibrahimkutluay.net
http://www.ibrahimkutluay.net/blog
http://www.ibrahimkutluay.net
http://www.ibrahimkutluay.net/blog
- White Rose
- Üye
- Mesajlar: 726
- Kayıt: 06 Tem 2005 09:41
- Konum: Güneyden
- İletişim:
bunlar işe yaramıyor
bu oluşan tutarlar toplanıp kullanıcıya borc alacak toplamı olarak gösteriliyor bunların toplamıda bir kaç kuruşluk fark yaratıyor
aslında miktar ve birim fiy onchange olayında bir procedure cağırıyor ve bu procedure dataset parametre olarak göderiliyor böylece stoktan faturadan da aynı hesaplama yapılabiliyor
stok_birimfiyonchange
tutar_hesapla(stok);
stok_miktARyonchange
tutar_hesapla(stok);
fatura_birimfiyonchange
tutar_hesapla(fatura);
fatura_miktarfiyonchange
tutar_hesapla(fatura);
işin garibi sadece bir alanın degişmesinde hesaplamada hata oluşmuyor sadece 2 alanda degiştigi vakit böyle bir sorun oluşuyor
ayrıcada mecburen 4 hane kullanma gerekiyor diğer döviz hesapları için
ytl kullanımında 2 hane olacak onun için datayı 18.2 yapamıyorum
ama su .2300 sonuda 2 sıfır ekleme olayını deneyecegim
aslında miktar ve birim fiy onchange olayında bir procedure cağırıyor ve bu procedure dataset parametre olarak göderiliyor böylece stoktan faturadan da aynı hesaplama yapılabiliyor
stok_birimfiyonchange
tutar_hesapla(stok);
stok_miktARyonchange
tutar_hesapla(stok);
fatura_birimfiyonchange
tutar_hesapla(fatura);
fatura_miktarfiyonchange
tutar_hesapla(fatura);
işin garibi sadece bir alanın degişmesinde hesaplamada hata oluşmuyor sadece 2 alanda degiştigi vakit böyle bir sorun oluşuyor
ayrıcada mecburen 4 hane kullanma gerekiyor diğer döviz hesapları için
ytl kullanımında 2 hane olacak onun için datayı 18.2 yapamıyorum
ama su .2300 sonuda 2 sıfır ekleme olayını deneyecegim
İlginiz için teşekkürler
Bilgisayar fijutsi siemens amd turion 64 notebook
xphome sp2 var 1170 mb ram
bunu altında sene 2005 de wmware 40 da kurulmuş
virtual xpsp2 prof işletim sistemi 768 ram
buna d2006 zeos , firebird, Abbrevia305Beta6 kurulu
virtualleri wmplayer ile koşturuyorum (VMware-player-1.0.1-19317.exe)
aynı şekilde bunu d2007 dede denedim zeos, firebird, Abbrevia305Beta6 kurulu
bunu ayrıca mysql ve postgresqlde denemedim oda sorunlu
db unitin Tfloatfiled ında bir şey var gibi
,
sonuç elde var 0 değil işte, kafasına göre dolduruyor .33 den sonra 3. ve 4. haneleri
denemediğim bir şey kalmadı
value,asfloat,ascurrency,asbcd,asvariant
roundto, simpleroundto, binimum kodla dönüştürme parçala birleştir dönüştür işlemleri
bulduğum ve size verdiğim değerleri öylesine bir tablo yaratıp
ibx componenetleriyle denedim onda da aynı hata var ama çözülebiliyor
ibx tbcdfiled olarak tanıyor numeric(18,4) ü
ascurrency=Roundto(ascurency* ascurrency,-2);
bu şekilde doğru sonuç üretiyor
bunun haricinde oda sorunlu(value,asfloat vs gibi)
şimdi yaptığım testlerde yeni kayıt oluştururken bu hatayı hiç görmedim doğru bir şekilde
2 hane ve sonu 00 şelinde kayıtlar düzgün oluşuyor
ama iş editleyip değiştirmeye gelince bozukluk başlıyor
sadece bir alanı adeti veya birim fiyatı değiştirir seniz 1000 de bir
ikisini degiştirirseniz 100/ 5 hatalı kayıt oluşuyor
bu değerleri test programı otomatik random üretiyor bu arada
bir arkadaş şunu intel işlemcide denesin de diyeyim bu amd den oluyor
veya vitual altında çalışmak veya derlemekten oluyor diyeyim.
yada çok büyük ,gelmiş-geçmiş en büyük bug, yada çok ufak bir şeyi gözden kaçırıyorum?
3 alan açın numeric(18,4)
ilk ikisine verdigim degerleri girin beforepost ta ikisini çarpıp 3. atayın roundto(,-2) layıp
sizde de aynı hatalı sonuç veriyormu
804533,289*
1994726,37=1604823767111,1298
1626800,4045
1551543,33=2524051316843,2796
1380010,7691*
474565,36=654905307441,8102
554270,3802*
1230910,93=682257469163,435586
1758713,9*
1626094,61=2859835193322,079
1380010,7691
474565,36=654905307441,8102
792037,798*
520022,12=411877174836,0901
sonuçlar xxxxx,xx00 çıkması gerekiyor 411877174836,0900 gibi
proje bitti ama hiç bir işe yaramıyor hatalı bakiye veren veren bir program oldu sonuçta
nerden yaptım şu test programını bilmemki belkide hayatta hiç bu rakamlar girilmiyecekti
xphome sp2 var 1170 mb ram
bunu altında sene 2005 de wmware 40 da kurulmuş
virtual xpsp2 prof işletim sistemi 768 ram
buna d2006 zeos , firebird, Abbrevia305Beta6 kurulu
virtualleri wmplayer ile koşturuyorum (VMware-player-1.0.1-19317.exe)
aynı şekilde bunu d2007 dede denedim zeos, firebird, Abbrevia305Beta6 kurulu
bunu ayrıca mysql ve postgresqlde denemedim oda sorunlu
db unitin Tfloatfiled ında bir şey var gibi
,
sonuç elde var 0 değil işte, kafasına göre dolduruyor .33 den sonra 3. ve 4. haneleri

denemediğim bir şey kalmadı
value,asfloat,ascurrency,asbcd,asvariant
roundto, simpleroundto, binimum kodla dönüştürme parçala birleştir dönüştür işlemleri
bulduğum ve size verdiğim değerleri öylesine bir tablo yaratıp
ibx componenetleriyle denedim onda da aynı hata var ama çözülebiliyor
ibx tbcdfiled olarak tanıyor numeric(18,4) ü
ascurrency=Roundto(ascurency* ascurrency,-2);
bu şekilde doğru sonuç üretiyor
bunun haricinde oda sorunlu(value,asfloat vs gibi)
şimdi yaptığım testlerde yeni kayıt oluştururken bu hatayı hiç görmedim doğru bir şekilde
2 hane ve sonu 00 şelinde kayıtlar düzgün oluşuyor
ama iş editleyip değiştirmeye gelince bozukluk başlıyor
sadece bir alanı adeti veya birim fiyatı değiştirir seniz 1000 de bir
ikisini degiştirirseniz 100/ 5 hatalı kayıt oluşuyor
bu değerleri test programı otomatik random üretiyor bu arada
bir arkadaş şunu intel işlemcide denesin de diyeyim bu amd den oluyor
veya vitual altında çalışmak veya derlemekten oluyor diyeyim.
yada çok büyük ,gelmiş-geçmiş en büyük bug, yada çok ufak bir şeyi gözden kaçırıyorum?
3 alan açın numeric(18,4)
ilk ikisine verdigim degerleri girin beforepost ta ikisini çarpıp 3. atayın roundto(,-2) layıp
sizde de aynı hatalı sonuç veriyormu
804533,289*
1994726,37=1604823767111,1298
1626800,4045
1551543,33=2524051316843,2796
1380010,7691*
474565,36=654905307441,8102
554270,3802*
1230910,93=682257469163,435586
1758713,9*
1626094,61=2859835193322,079
1380010,7691
474565,36=654905307441,8102
792037,798*
520022,12=411877174836,0901
sonuçlar xxxxx,xx00 çıkması gerekiyor 411877174836,0900 gibi
proje bitti ama hiç bir işe yaramıyor hatalı bakiye veren veren bir program oldu sonuçta
nerden yaptım şu test programını bilmemki belkide hayatta hiç bu rakamlar girilmiyecekti

kimse yokmu
şu değerleri zeosta deneyececek
tşk.
tşk.