Delphi Can
[ÇÖZÜLDÜ] Delphi Formül Hesaplamaları Hk. - Baskı Önizleme

+- Delphi Can (https://www.delphican.com)
+-- Forum: Delphi (https://www.delphican.com/forumdisplay.php?fid=3)
+--- Forum: Genel Programlama (https://www.delphican.com/forumdisplay.php?fid=6)
+--- Konu Başlığı: [ÇÖZÜLDÜ] Delphi Formül Hesaplamaları Hk. (/showthread.php?tid=4957)

Sayfalar: 1 2


[ÇÖZÜLDÜ] Delphi Formül Hesaplamaları Hk. - shooterman - 12-06-2020

Arkadaşlar selam,

Yine bir excel formülünü programa anlatabilme ve aynı sonucu çıkarma çabasındayım. Her zamanki gibi tutmadı yine. Delphi içinde formüllerin bir sıralaması ya da bu sıralamayı değiştirecek bir ayarı var mı bulamadım.
Exceldeki formül : = (G10*AU10*AW10) /1000*80/62-(G10-V10*(1-AN10/100))*(AU10*(AW10/1000)*80/62)-V10*(AN10/100)*(AW10/1000)*80/62
çıkan sonuç : 6.51

Ben ise bu formüldeki aynı sıraya göre yaptığımda ise çıkan sonuç : 4.05
Delphinin burada hesaplama davranışı nasıl? Yani klasik olarak bildiğimiz, önce parantez içlerinin işlemini tamamlayıp, daha sonrasında diğer işlemlere mi geçiyor, ya da, sen ne yazdıysan ben onu aynen okurum diye mi çalışıyor? Bu konuda tecrubesi olan arkadaşlarımızdan yardım alırsam çok sevinirim.


Delphi Formül Hesaplamaları Hk. - esistem - 12-06-2020

formullerin sıralamasını parantezler ile yapacaksınız, mesela en baştaki /1000*80/62- kısmı belirsiz görünüyor, en sondaki *80/62 kısmı ona keza belirsiz görünüyor, çarpma, bölme, toplama ve çıkarma sıralaması ile gidiyordu sanırım işlem sıraları. en sonda mesela bütün işlemler yapıldıktan sonra mı 80 ile çarpıp 60 a bölücek yoksa (AW10/1000) kısmınamı uygulayacak ????

bence aşağıdaki gibi olmalı ;

(((G10*AU10*AW10) /1000*80/62)-(G10-V10*(1-AN10/100))*((AU10*(AW10/1000)*80/62)-V10)*(AN10/100)*(AW10/1000))*80/62


Cvp: Delphi Formül Hesaplamaları Hk. - TescilsizUzman - 12-06-2020

Merhaba,
Excel'in kullandığı formülde temel matematiksel operatörler kullanılmış. Parantezler de sabit olduğuna göre Excel formülünü kopyalayıp, doğrudan kod içerisine yapıştırıp kullanabilirsiniz. 
Öyle yaptı iseniz, aradaki farkın yuvarlamalardan kaynaklı olduğunu söyleyebilirim.
Delphi tarafında, G10, AU10, AW10 gibi sabitlerinizi yüksek hassasiyetli veri tipleri olarak tanımlayın.


Delphi Formül Hesaplamaları Hk. - Hayati - 12-06-2020

Hücrelere aşağıdaki değerleri girdiğinizde
G10 = 10
AU10 = 20
AW10 = 30
V10 = 40
AN10 = 50

Excel de 7,891779396 sonucunu mu buluyorsunuz? Yada 6.51 bulduğunuz Excel hücre değerlerini belirtebilir misiniz?


Cvp: Delphi Formül Hesaplamaları Hk. - shooterman - 12-06-2020

(12-06-2020, Saat: 18:02)Fesih ARSLAN Adlı Kullanıcıdan Alıntı: Merhaba,
Excel'in kullandığı formülde temel matematiksel operatörler kullanılmış. Parantezler de sabit olduğuna göre Excel formülünü kopyalayıp, doğrudan kod içerisine yapıştırıp kullanabilirsiniz. 
Öyle yaptı iseniz, aradaki farkın yuvarlamalardan kaynaklı olduğunu söyleyebilirim.
Delphi tarafında, G10, AU10, AW10 gibi sabitlerinizi yüksek hassasiyetli veri tipleri olarak tanımlayın.
@"Fesih ARSLAN" 
@esistem 
@Hayati 

Fesih hocam, şu andaki yapı exceldeki aynı sıralama ile gidiyor. Hassasiyetleri de vigülden sonra 3 hane olacak şekilde planladım. Lakin yine de sonuç çok farklı çıkıyor. @esistem  üstadın söylediği şekilde de formulize edeceğim. Umarım bir sonuç elde ederim.


Delphi Formül Hesaplamaları Hk. - Hayati - 12-06-2020

Ben, parantez duzeni yani islem oncelik sirasi ile ilgili oldugunu dusunuyorum


Cvp: Delphi Formül Hesaplamaları Hk. - TescilsizUzman - 12-06-2020

Değişken veri tiplerini önce Single, sonra da double olarak tanımlayıp, sonuçlarını ayrı ayrı gözlemleyin.


Delphi Formül Hesaplamaları Hk. - engerex - 13-06-2020

Denedim, Delphi10.3, Excel ve LibreOffice de virgülden sonra 15 karakter tam uyuşuyor. Yani 0,123456789012345
Delphi ile değer atamada bir yanlış yazımınız olabilir. Kodların bizi ilgilendiren kısımlarını dosya halinde paylaşır mısınız?


Delphi Formül Hesaplamaları Hk. - SimaWB - 13-06-2020

Excel'de bir hücredeki sayı virgülden sonra 3 basamak göstersin diye ayarlansa bile hesaplamada sayının tümü hesaba katılıyordur ve fark bu sebepten oluşuyordur diye tahmin ediyorum.


Delphi Formül Hesaplamaları Hk. - shooterman - 13-06-2020

Selamlar
Formuleri aşağıdaki şekilde yapılandırarak doğru sonuca ulaştım. Öncelikler parantez içine veriliyor gördüğüm kadarı ile. Hepinize ilginizden dolayı çok teşekkür ederim.

= (G10*AU10*AW10) /1000*80/62-(G10-V10*(1-AN10/100))*(AU10*(AW10/1000)*80/62)-V10*(AN10/100)*(AW10/1000)*80/62

Formul1 = (G10*AU10*AW10)
Formul2 = (G10*AU10*AW10) /1000*80/62
Formul3 = (1-AN10/100)
Formül 4 = (G10-V10*(1-AN10/100))
Formul5 = (AW10/1000)
Formül 6 = (AU10*(AW10/1000)*80/62)
Formul7 = (AN10/100)

Sonuç = (formul2)-(formul4)*(formul6)-dm.qryanalizler.fieldbyname('varsonu_pres_camur').value* dm.qryanalizler.fieldbyname('analiz_yika_keknemi').value/100)*formul7*formul5*80/62;