Yorumları: 701
Konuları: 74
Kayıt Tarihi: 20-12-2018
Aktif Kullandığınız Delphi Sürümü:
Rep Puanı: 1.626
Programcı
12-06-2020, Saat: 17:14
(Son Düzenleme: 13-06-2020, Saat: 11:47, Düzenleyen: shooterman.)
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.
Yazılımcı, kahveyi koda çeviren bir organizmadır.
Yorumları: 884
Konuları: 35
Kayıt Tarihi: 12-08-2016
Aktif Kullandığınız Delphi Sürümü:
Rep Puanı: 3.853
Uzman
12-06-2020, Saat: 17:31
(Son Düzenleme: 12-06-2020, Saat: 17:32, Düzenleyen: esistem.)
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
Yorumları: 4.246
Konuları: 381
Kayıt Tarihi: 07-07-2016
Aktif Kullandığınız Delphi Sürümü:
Rep Puanı: 17.117
Üstad
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.
DelphiCan'dır!
Yorumları: 274
Konuları: 18
Kayıt Tarihi: 11-10-2016
Rep Puanı: 1.302
Programcı
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?
Yorumları: 701
Konuları: 74
Kayıt Tarihi: 20-12-2018
Aktif Kullandığınız Delphi Sürümü:
Rep Puanı: 1.626
Programcı
(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.
Yazılımcı, kahveyi koda çeviren bir organizmadır.
Yorumları: 274
Konuları: 18
Kayıt Tarihi: 11-10-2016
Rep Puanı: 1.302
Programcı
Ben, parantez duzeni yani islem oncelik sirasi ile ilgili oldugunu dusunuyorum
Yorumları: 4.246
Konuları: 381
Kayıt Tarihi: 07-07-2016
Aktif Kullandığınız Delphi Sürümü:
Rep Puanı: 17.117
Üstad
Değişken veri tiplerini önce Single, sonra da double olarak tanımlayıp, sonuçlarını ayrı ayrı gözlemleyin.
DelphiCan'dır!
Yorumları: 1.048
Konuları: 45
Kayıt Tarihi: 24-07-2016
Aktif Kullandığınız Delphi Sürümü:
Rep Puanı: 3.057
Uzman
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?
Yorumları: 1.572
Konuları: 88
Kayıt Tarihi: 09-08-2016
Rep Puanı: 13.841
Üstad
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.
There's no place like 127.0.0.1
Yorumları: 701
Konuları: 74
Kayıt Tarihi: 20-12-2018
Aktif Kullandığınız Delphi Sürümü:
Rep Puanı: 1.626
Programcı
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;
Yazılımcı, kahveyi koda çeviren bir organizmadır.