KDV Sorunu

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
fiko19
Üye
Mesajlar: 73
Kayıt: 07 Oca 2009 11:39

KDV Sorunu

Mesaj gönderen fiko19 »

Merhaba Arkadaşlar bi sorunum var

bir fatura programı yaptım program kdv hesaplarken örneğin " 16,5346" şeklinde çıkıyo veya " 1,337" gibi değerler çıkıyor ben virgülden sonraki ondalık değerlerini tek hane almak istiyorum örneğin 16,5 veya 1,3 şeklinde bunu nasıl yapabilirim

birde genel toplamı hem sayısal olarak hemde fatura üstüne metinsel olarak yazdırabilirmiyim örnek

"139,5 TL" " YüzOtuzDokuz Lira 50 Kuruş" şeklinde
Kullanıcı avatarı
Battosai
Üye
Mesajlar: 1316
Kayıt: 01 Eki 2007 12:02
Konum: Ankara

Re: KDV Sorunu

Mesaj gönderen Battosai »

KDV hepimizin sorunu :twisted: Soruya gelince parasal ifadeler için virgülden sonra çift hane olmalı...

Kod: Tümünü seç

float:=16,5346;
showmessage(FormatFloat('#,##0.00',float));
16,53 olarak dönmesi lazım
Kullanıcı avatarı
unicorn64
Üye
Mesajlar: 919
Kayıt: 04 Nis 2006 08:56
Konum: yine yeniden Ankara ^_^

Re: KDV Sorunu

Mesaj gönderen unicorn64 »

diğer soru için ise, nette örnek çoktur ama bi ara şöyle bir şey yazmıştım

Kod: Tümünü seç

  function Rakam(Sayi:Int64):String;
  const n=9;
    Basamak:array[0..n]of String=('','Bin','Milyon','Milyar','Trilyon','Katrilyon','Kentrilyon','Sekstilyon','Septilyon','Oktilyon');
    Onlar:array[0..n]of String=('','On','Yirmi','Otuz','Kırk','Elli','Altmış','Yetmiş','Seksen','Doksan');
    Birler:array[0..n]of String=('','Bir','İki','Üç','Dört','Beş','Altı','Yedi','Sekiz','Dokuz');
  var i:Byte; UcHane:Word; Yed,UcluHane:String; HangiBasamak:Byte;
      Negatif,BasamakYaz:Boolean;

    function Modu(var Sayisi:Word):Byte;
    begin
       Result:=Sayisi mod 10;
       Sayisi:=Sayisi div 10;
    end;

  begin
    if Sayi=0 then
      Result:=''
    else begin
      Negatif:=Sayi<0;
      if Negatif then Sayi:=-Sayi;
      Result:='';
      HangiBasamak:=0;
      while Sayi>0 do begin
        UcHane:=Sayi mod 1000;  Sayi:=Sayi div 1000;
        BasamakYaz:=UcHane>0;
        repeat
          UcluHane:='';
          if ((HangiBasamak=1) and (UcHane=1)) then Break;//sadece bin yazılacaksa
          i:=Modu(UcHane); UcluHane:=Birler[i];   //3 hanenin 1. si
          i:=Modu(UcHane); UcluHane:=Onlar[i]+' '+UcluHane; //3 hanenin 2. si
          i:=Modu(UcHane);
          if i>0 then Yed:='Yüz' else Yed:='';
          if i>1 then Yed:=Birler[i]+' '+Yed;
          UcluHane:=Yed+' '+UcluHane;//3 hanenin 3. sü
        until True;
        if BasamakYaz then Result:=UcluHane+' '+Basamak[HangiBasamak]+' '+Result;
        inc(HangiBasamak);
      end;
      if Negatif then Result:='Eksi'+Result
      else //Delete(Result,1,1);
    end;
  end;

  function ParaOku(Sayi:Real):String;
  var
    Tam,Ondalik:String; TamSayi:Int64;
  begin
    Tam:='TL';
    Ondalik:='Kr';
    TamSayi:=Trunc(Sayi);
    Result:=Rakam(TamSayi)+' '+Tam;
    TamSayi:=Round((Sayi-TamSayi)*100);
    if TamSayi>0 then
      Result:=Result+' '+Rakam(TamSayi)+' '+Ondalik;
  end;
kullanımı

Kod: Tümünü seç

showmessage(ParaOku(15.50));
bazen yükselmek için önce dibi görmek gerekir...

forumda soru sormadan önce bakılmalı bence
daha fazlası için...

yürümeyi öğrenmeden koşmaya çalışanlar için, tökezleyip düşmek kaçınılmazdır...

Resim
Cevapla