Yuvarlama işlemlerinde elim kolum bağlandı
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
-
- Üye
- Mesajlar: 136
- Kayıt: 18 Oca 2005 05:24
- Konum: İzmir
Yuvarlama işlemlerinde elim kolum bağlandı
Bir RentaCar programı yazıyorum ve Database olarak FireBird 1.5 kullanıyorum. Kontratlarımı kaydederken kontratın toplam rakamı nı DOUBLE PRECISION olan bir Field' a atıyorum. belli bir hesaplamalardan sonra qryKontrat.FieldByName('DEGER').asFloat=RoundTo(124,699999999934,-2) bir değer çıkıyor ve ben bunu iki haneli dataya kaudetmek istiyorum ama roundTo foksiyonunda bazı değerler nasıl giriyorsa öyle çıkıyor yada ', ' den sonra 2 hane olacağına 12 hane sonra degerler oluyor. BU sorunda beni bu değeri cariyi borclandırırken problem çıkartıyor. bu işlemin karşılığında 124,70 gibi bir alacaklandırma işlemi yaptığımda görüntüde hesap kapanmış ama SUM(BORC)=SUM(ALACAK) eşit olmuyor. BU problemi nasıl aşabilirim
Her iyinin içinde bir Kötülük.Her Kötnün içide de bir iyilik vardır
-
- Üye
- Mesajlar: 136
- Kayıt: 18 Oca 2005 05:24
- Konum: İzmir
Merhaba,
sizin verdiğiniz örneğe göre bir deneme yaptım. Bende 124,7 olarak kaydetti
sum ile toplamlarını aldığımda 10 tanenin toplamını 1247 olarak verdi.
Bu durumda siz fields ın display formatını falan değiştirmiş olduğunuz için sizde farklı vermiş olabilir. Sum aldığınız alanın display özelliklerini falan bir kontrol edin.
Kolay gelsin.
sizin verdiğiniz örneğe göre bir deneme yaptım. Bende 124,7 olarak kaydetti
Kod: Tümünü seç
procedure TForm1.IBDataSet1BeforePost(DataSet: TDataSet);
begin
ibdataset1.FieldByName('DEGER').asFloat:=RoundTo(124.699999999934,-2) ;
end;
sum ile toplamlarını aldığımda 10 tanenin toplamını 1247 olarak verdi.
Bu durumda siz fields ın display formatını falan değiştirmiş olduğunuz için sizde farklı vermiş olabilir. Sum aldığınız alanın display özelliklerini falan bir kontrol edin.
Kolay gelsin.
-
- Kıdemli Üye
- Mesajlar: 1223
- Kayıt: 26 Nis 2005 04:08
-
- Üye
- Mesajlar: 136
- Kayıt: 18 Oca 2005 05:24
- Konum: İzmir
-
- Kıdemli Üye
- Mesajlar: 1223
- Kayıt: 26 Nis 2005 04:08
Merhaba,
vt nizde double precision yerine Numeric tipini kullanırsanız. Dediğiniz olacaktır.
Aşağıdaki linkte dialect 1 den yukarıdakilerde Numeric ve Double precision tiplerinin aynı olduğu söyleniyor.
http://www.ibexpert.info/documentation/ ... N/456.html
Sizde örneğin Numeric in size ına 18 veya 15 scalar kısmına da 2 verip düzeltirseniz sanırım işinizi görmüş olur.
Kolay gelsin.
vt nizde double precision yerine Numeric tipini kullanırsanız. Dediğiniz olacaktır.
Aşağıdaki linkte dialect 1 den yukarıdakilerde Numeric ve Double precision tiplerinin aynı olduğu söyleniyor.
http://www.ibexpert.info/documentation/ ... N/456.html
Sizde örneğin Numeric in size ına 18 veya 15 scalar kısmına da 2 verip düzeltirseniz sanırım işinizi görmüş olur.
Kolay gelsin.
aslında problemin firebird veya interbase ile ilgisi yok.bende defalarca karşılaştım ve problemin sebebini dataya kayıt esnasında .AsFloat bir değer olarak kaydettiğimde olduğunu gördüm.Çözüm yolu ne. Ben projelerimde IbSql kullanıyorum ve sayısal alanları parametre ile şöyle bildiriyorum ve daha sonrasında hiç problem yaşamadım
Param.ParamByName('Tutar').AsDouble := CurrencyEdit1.Value;
Sizde problem yaşamazsınız
Param.ParamByName('Tutar').AsDouble := CurrencyEdit1.Value;
Sizde problem yaşamazsınız
-
- Üye
- Mesajlar: 136
- Kayıt: 18 Oca 2005 05:24
- Konum: İzmir