TL ve Kuruş Girişi

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
akissoftware
Üye
Mesajlar: 107
Kayıt: 17 Ağu 2010 08:08

TL ve Kuruş Girişi

Mesaj gönderen akissoftware » 13 Eki 2018 08:32

Arkadaşlar merhaba.. Bir program yapıyorum ve sürekli içinden çıkamadığım kısımlara giriyorum. Bu konularda bana yardımcı olacak Türkçe kaynak olarak bu site olduğu için ilk buraya başvuruyorum... Sorunuma yardımcı olabilirseniz beni büyük bir dertten kurtarırsınız...

Projemde 2 tane editbox.
1. Ürün Fiyatı (Brüt) - Editbox1
2. Ürün Fiyatı (Net) - Editbox2
3. KDV Oranı - Combobox


Combobox içerisinde 3 tane kdv oranı var. 0,7 ve 19 (% olarak). Kullanıcı brüt kısmına 100 girdi diyelim. KDV oranından da 7 seçti diyelim. Net fiyatı 93 olacak. Buraya kadar hesaplamalarda problemim yok. Aşağıdaki şekilde hesaplıyorum. Fakat problemim şurada başlıyor.
Kullanıcı hep tam sayılı ürün alıp satmıyorki.. Ürün brüt fiyatı 10,6 girdi diyelim. KDV 7 seçti ve net 9,858 yazıyor.
Şuan 2 tane problemim var.
1-) Ürün brüt fiyat girişinde kullanıcı ".xx" ondalık kısmına sadece parasal olarak giriş yapabilsin. Yani ondalık 2 haneden fazla giremesin(kuruş)
2-) Sonuç çıkan kısımda 9,858 yerine 9,85 yazsın. Ya da bu parasal işlemlerde nasıl yapılıyorsa öyle yapsın..


Yardımlarınızı bekliyorum


Kod: Tümünü seç

procedure TForm5.KDVHesapla;
var
  sayi1,sayi2: Double;
begin
try

if EditPrice.GetTextLen > 0 then
  // not empty
  sayi1 := strtofloat(EditPrice.Text)
else
  // empty
  sayi1:=0;
if KDV1.GetTextLen > 0 then
  // not empty
  sayi2 := strtofloat(KDV1.Text)
else
  // empty
  sayi2:=0;

EditNumberEdit3.Text := floattostr((sayi1 * sayi2)/100);
EditNet.Text:=  FloatToStr(StrToFloat(EditPrice.Text) - StrToFloat(EditNumberEdit3.Text));
except;
end;
end;

Kullanıcı avatarı
ihalilcoban
Üye
Mesajlar: 119
Kayıt: 10 Ara 2015 10:39
Konum: Gaziantep

Re: TL ve Kuruş Girişi

Mesaj gönderen ihalilcoban » 13 Eki 2018 08:06

Merhaba.

Display Format konusunu incelemelisiniz.
viewtopic.php?t=4924

akissoftware
Üye
Mesajlar: 107
Kayıt: 17 Ağu 2010 08:08

Re: TL ve Kuruş Girişi

Mesaj gönderen akissoftware » 15 Eki 2018 03:58

Hocam cevap için teşekkürler fakat oradaki kodlarla olmuyor bir türlü. Fakat bir şekilde halledebildim. Format şeklinde problemim kalmadı sanırım fakat xxx haneden fazla girip kontrolleri çalıştırınca hata veriyor. Mesela 1000 yazıp edit degerinin exit kontrolü çalışınca böyle hata alıyorum.

"Project1.exe raised exception class EConvertError with message ' 1000,00 is not a valid floating point value.' process stopped"

akissoftware
Üye
Mesajlar: 107
Kayıt: 17 Ağu 2010 08:08

Re: TL ve Kuruş Girişi

Mesaj gönderen akissoftware » 15 Eki 2018 04:05

EditNet.Text:= FloatToStr(StrToFloat(EditPrice.Text) - StrToFloat(EditNumberEdit3.Text));

Bu kısımda hata veriyor

Kullanıcı avatarı
ihalilcoban
Üye
Mesajlar: 119
Kayıt: 10 Ara 2015 10:39
Konum: Gaziantep

Re: TL ve Kuruş Girişi

Mesaj gönderen ihalilcoban » 15 Eki 2018 08:45

Merhaba.

Tip dönüşümüyle ilgili hata alıyorsunuz. Kodların tamamı olmadığı ve kullanım şeklinizi bilmediğim için tam yorum yapamayacağım. Daha önce yapmış olduğum bir örneği ekliyorum. Kendinize uyarlayabilirsiniz.
Dosya ekleri
Hesaplayıcı.zip
(208.19 KiB) 18 kere indirildi

Kullanıcı avatarı
greenegitim
Üye
Mesajlar: 705
Kayıt: 28 Nis 2011 09:33
Konum: İstanbul

Re: TL ve Kuruş Girişi

Mesaj gönderen greenegitim » 15 Eki 2018 09:58

akissoftware yazdı:
15 Eki 2018 03:58
Hocam cevap için teşekkürler fakat oradaki kodlarla olmuyor bir türlü. Fakat bir şekilde halledebildim. Format şeklinde problemim kalmadı sanırım fakat xxx haneden fazla girip kontrolleri çalıştırınca hata veriyor. Mesela 1000 yazıp edit degerinin exit kontrolü çalışınca böyle hata alıyorum.

"Project1.exe raised exception class EConvertError with message ' 1000,00 is not a valid floating point value.' process stopped"
a:double; // a double türünde bir değişken
siz kod ekranında
a:=1000,00 yazıp derlemeye çalıştığınızda kodunuz compilerdan size geri döner 1000,00 nedir bilmiyorum der ama
a:=1000.00 dediğinizde size kızmaz ben bunun ne olduğunu biliyorum ve isteğini yerine getiriyorum der sizin sorununuz da tam burada.
Mücadele güzelleştirir!

Kullanıcı avatarı
SimaWB
Üye
Mesajlar: 1310
Kayıt: 07 May 2009 09:42
Konum: İstanbul
İletişim:

Re: TL ve Kuruş Girişi

Mesaj gönderen SimaWB » 16 Eki 2018 09:00

@akissoftware; kodlara bakmadan sadece soruda yazdıklarınıza okuyarak yazıyorum. O yüzden yanlış anladıysam şimdiden affola:
Herşeyden önce brüt-net dönüşümünü hatalı yapıyorsunuz gibi algıladım ben. Örneğin sizin hesaba göre, %19 KDV dahil fiyatı 100 TL olan ürünün net fiyatı 81 TL oluyor. Ama normalde 84 TL olmalı (küsuratları atıyorum)
There's no place like 127.0.0.1

akissoftware
Üye
Mesajlar: 107
Kayıt: 17 Ağu 2010 08:08

Re: TL ve Kuruş Girişi

Mesaj gönderen akissoftware » 16 Eki 2018 12:56

ihalilcoban yazdı:
15 Eki 2018 08:45
Merhaba.

Tip dönüşümüyle ilgili hata alıyorsunuz. Kodların tamamı olmadığı ve kullanım şeklinizi bilmediğim için tam yorum yapamayacağım. Daha önce yapmış olduğum bir örneği ekliyorum. Kendinize uyarlayabilirsiniz.
Hocam verdiğiniz örnek çok işime yaradı.. Lakin şimdide şöyle bir problemim var..

Mesela hesaplama işlemini yaptık sonucu bulduk.. Haliyle değer girilen alanı da format float ile biçimlendirdik. Fakat kullanıcı kdv oranını değiştirdi diyelim o zaman hata veriyor.

Sizdeki örneğe böyle bir girişle düzeltmeye çalıştım. Ama floata dönüştürülmüş bir veriyi tekrar double haline dönüştürebilir miyiz?

Kod: Tümünü seç

procedure THesaplayici_Pen.Edit1Enter(Sender: TObject);
begin
Edit1.Color:=clLime;
Edit1.Clear;
end;
Hata ekranını da ekliyorum; https://prnt.sc/l6oixg

Kullanıcı avatarı
ihalilcoban
Üye
Mesajlar: 119
Kayıt: 10 Ara 2015 10:39
Konum: Gaziantep

Re: TL ve Kuruş Girişi

Mesaj gönderen ihalilcoban » 16 Eki 2018 01:27

Merhaba.

Kullanıcı tarafından yapılan girişte binlik ayracı kullanılmadan girilmesi gerekiyor. Örnekte belirttiğim dolar kuru yazan kısma 5.00,00 şeklinde kullanmak hata verir. Değer girilen alanı formatlamaya da gerek yoktur. Sadece kuruş ayrımı yapmak için virgül kullanmak yeterli nokta kullanmaya gerek yok. Bu şekilde kullanılırsa tekrardan bir tip dönüşümüne gerek kalmaz ve hata vermez.

akissoftware
Üye
Mesajlar: 107
Kayıt: 17 Ağu 2010 08:08

Re: TL ve Kuruş Girişi

Mesaj gönderen akissoftware » 16 Eki 2018 02:03

Cevap için teşekkürler.

Lakin girilen alanı böyle formatlamam gerekiyor. Kullanıcı ne girdiğini görmesi gerekiyor. Eğer flottostr gibi bir fonksiyon olursa yani formatladığımız değeri geri dönüştürebilirsek o zaman süper olacak

ertank
Üye
Mesajlar: 1202
Kayıt: 11 Eyl 2015 11:45

Re: TL ve Kuruş Girişi

Mesaj gönderen ertank » 16 Eki 2018 02:43

Merhaba, kullandığınız Delphi sürümü nedir?

akissoftware
Üye
Mesajlar: 107
Kayıt: 17 Ağu 2010 08:08

Re: TL ve Kuruş Girişi

Mesaj gönderen akissoftware » 16 Eki 2018 03:28

Delphi 7

Kullanıcı avatarı
ihalilcoban
Üye
Mesajlar: 119
Kayıt: 10 Ara 2015 10:39
Konum: Gaziantep

Re: TL ve Kuruş Girişi

Mesaj gönderen ihalilcoban » 16 Eki 2018 04:08

Merhaba.

Eğer illaki 5.000,00 şeklinde kullanmanız gerekiyorsa, işleme almadan önce fonksiyonla aradaki noktayı tespit edip silerek işlem yapabilirsiniz. Zira aldığınız hata noktadan kaynaklı.

ertank
Üye
Mesajlar: 1202
Kayıt: 11 Eyl 2015 11:45

Re: TL ve Kuruş Girişi

Mesaj gönderen ertank » 16 Eki 2018 05:05

1- Eğer kullanım şeklinizi değiştirmek istemiyor iseniz;
2- Binler ayracı mevcut olacak şekilde gösterimi "FormatFloat('#,##0.00', Sayi1)" gibi bir ifade ile gerçekleştiriyorsanız;

Yukarıdaki 1 ve 2 numaralı maddelerin ikiside sizin için tersine dönüşüm yapacağınız zaman Sistem binler ayracını string değer içinden silmek için aşağıdaki gibi bir fonksiyon kullanabilirsiniz:

Kod: Tümünü seç

Sayi1 := StrToFloat(StringReplace(EditPrice.Text, ThousandSeparator, EmptyStr, [rfReplaceAll]));
"ThousandSeparator" değeri Delphi tarafından otomatik olarak Windows sistem binler ayracı karakterini içerir şekilde ayarlanmıştır. Siz kodunuzda müdahale etmediğiniz sürece Windows sistem standardı olarak kalacaktır.

Tabi örnek kodu ihtiyacınızı karşılaması halinde tüm string -> Double dönüşümleri için kullanmanız gerekecektir.

Cevapla