TL ve Kuruş Girişi

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

TL ve Kuruş Girişi

Mesaj gönderen akissoftware »

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;
ihalilcoban
Üye
Mesajlar: 121
Kayıt: 10 Ara 2015 10:39

Re: TL ve Kuruş Girişi

Mesaj gönderen ihalilcoban »

Merhaba.

Display Format konusunu incelemelisiniz.
viewtopic.php?t=4924
akissoftware
Üye
Mesajlar: 118
Kayıt: 17 Ağu 2010 09:08

Re: TL ve Kuruş Girişi

Mesaj gönderen akissoftware »

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: 118
Kayıt: 17 Ağu 2010 09:08

Re: TL ve Kuruş Girişi

Mesaj gönderen akissoftware »

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

Bu kısımda hata veriyor
ihalilcoban
Üye
Mesajlar: 121
Kayıt: 10 Ara 2015 10:39

Re: TL ve Kuruş Girişi

Mesaj gönderen ihalilcoban »

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
(207.41 KiB) 156 kere indirildi
Kullanıcı avatarı
greenegitim
Üye
Mesajlar: 713
Kayıt: 28 Nis 2011 10:33
Konum: İstanbul

Re: TL ve Kuruş Girişi

Mesaj gönderen greenegitim »

akissoftware yazdı: 15 Eki 2018 04: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: 1316
Kayıt: 07 May 2009 10:42
Konum: İstanbul
İletişim:

Re: TL ve Kuruş Girişi

Mesaj gönderen SimaWB »

@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: 118
Kayıt: 17 Ağu 2010 09:08

Re: TL ve Kuruş Girişi

Mesaj gönderen akissoftware »

ihalilcoban yazdı: 15 Eki 2018 09: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
ihalilcoban
Üye
Mesajlar: 121
Kayıt: 10 Ara 2015 10:39

Re: TL ve Kuruş Girişi

Mesaj gönderen ihalilcoban »

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: 118
Kayıt: 17 Ağu 2010 09:08

Re: TL ve Kuruş Girişi

Mesaj gönderen akissoftware »

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
Kıdemli Üye
Mesajlar: 1650
Kayıt: 12 Eyl 2015 12:45

Re: TL ve Kuruş Girişi

Mesaj gönderen ertank »

Merhaba, kullandığınız Delphi sürümü nedir?
akissoftware
Üye
Mesajlar: 118
Kayıt: 17 Ağu 2010 09:08

Re: TL ve Kuruş Girişi

Mesaj gönderen akissoftware »

Delphi 7
ihalilcoban
Üye
Mesajlar: 121
Kayıt: 10 Ara 2015 10:39

Re: TL ve Kuruş Girişi

Mesaj gönderen ihalilcoban »

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
Kıdemli Üye
Mesajlar: 1650
Kayıt: 12 Eyl 2015 12:45

Re: TL ve Kuruş Girişi

Mesaj gönderen ertank »

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