Delphi Can
Parayı çarpma ve toplama işlemi - 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ığı: Parayı çarpma ve toplama işlemi (/showthread.php?tid=1077)

Sayfalar: 1 2


Parayı çarpma ve toplama işlemi - serhat - 17-06-2017

(16-06-2017, Saat: 23:42)Fesih ARSLAN Adlı Kullanıcıdan Alıntı:
(16-06-2017, Saat: 23:28)serhat Adlı Kullanıcıdan Alıntı: Kısmen yaptım, ama 15,000 * 3 =  45,000 olması lazım fakat 45 olarak veriyor virgülden sonraki değerleri nasıl alabilirim?




function NoktaConvert(StrNokta: String): String; // Noktayı virgüle çevir
begin
 Result := StringReplace(StrNokta, '.', ',', [rfReplaceAll, rfIgnoreCase]);
end;

procedure TForm4.Hesap(Sender: TObject); // Hesaplama
var
 Fiyat, Adet: Real;
begin
if LV.Items.Count > 0 then
 begin
   With LV do
   begin
     Items.BeginUpdate;
     try
       for I := Items.Count - 1 downto 0 do
       begin
         Fiyat := StrToFloat(NoktaConvert(Items[I].SubItems[2]));
         Adet := StrToFloat(Items[I].SubItems[3]);

         Items[I].SubItems[4] := FloatToStr(Fiyat * Adet);
       end;
     finally
       Items.EndUpdate;
     end;
   end;
 end;
end;

Merhaba Serhat Bey,
Kurmuş olduğunuz algoritmada mantıksal bir hata (fatal error Smile ) var.
Bu algoritmayı adımlayacak olursak;
Örneğin Tutar = 15.000,00 TL olsun, Adet = 3 olsun
NoktaConvert adımında Tutar = 15,000,00 olacaktır.
Fiyat * Adet = tahminimce 45 gibi bir sonuç olacaktır. (Test imkanım şu an için olmadığından sonuç konusunda net birşey söyleyemiyorum)




Tam olarak ne demek ,istediğinizi anlayamadım edite 15.000 bin olarak alıyorum 15.000,00 olarak değil ayrıntı verir misiniz?





procedure TForm2.FiyatChange(Sender: TObject);
var
 Rp: String;
 Rph: Currency;
begin
 Rp := Fiyat.Text;
 Rp := StringReplace(Rp, ',', '', [rfReplaceAll, rfIgnoreCase]);
 Rp := StringReplace(Rp, '.', '', [rfReplaceAll, rfIgnoreCase]);
 Rph := StrToCurrDef(Rp, 0);
 Fiyat.Text := FormatCurr('#,###', Rph);
 Fiyat.SelStart := length(Fiyat.Text);
end;


Para formatına çevirmek için bu yöntemi kullanıyorum


Cvp: Parayı çarpma ve toplama işlemi - Fesih ARSLAN - 17-06-2017

(17-06-2017, Saat: 06:37)serhat Adlı Kullanıcıdan Alıntı:
(16-06-2017, Saat: 23:42)Fesih ARSLAN Adlı Kullanıcıdan Alıntı: Merhaba Serhat Bey,
Kurmuş olduğunuz algoritmada mantıksal bir hata (fatal error Smile ) var.
Bu algoritmayı adımlayacak olursak;
Örneğin Tutar = 15.000,00 TL olsun, Adet = 3 olsun
NoktaConvert adımında Tutar = 15,000,00 olacaktır.
Fiyat * Adet = tahminimce 45 gibi bir sonuç olacaktır. (Test imkanım şu an için olmadığından sonuç konusunda net birşey söyleyemiyorum)




Tam olarak ne demek ,istediğinizi anlayamadım edite 15.000 bin olarak alıyorum 15.000,00 olarak değil ayrıntı verir misiniz?





procedure TForm2.FiyatChange(Sender: TObject);
var
 Rp: String;
 Rph: Currency;
begin
 Rp := Fiyat.Text;
 Rp := StringReplace(Rp, ',', '', [rfReplaceAll, rfIgnoreCase]);
 Rp := StringReplace(Rp, '.', '', [rfReplaceAll, rfIgnoreCase]);
 Rph := StrToCurrDef(Rp, 0);
 Fiyat.Text := FormatCurr('#,###', Rph);
 Fiyat.SelStart := length(Fiyat.Text);
end;


Para formatına çevirmek için bu yöntemi kullanıyorum

Deneme.gif

Not: Edit'in OnChange olayında virgül (,) karakteri girilemediği için bu olaydaki kodlarınızı, Button!un OnClick olayında kullandım.
         Bu kısımda da bir mantıksal hata var. Son kullanıcı Tutarın ondalık kısımlarını giremiyor.


Parayı çarpma ve toplama işlemi - meko - 17-06-2017

Alıntı:
procedure TForm2.FiyatChange(Sender: TObject);
var
 Rp: String;
 Rph: Currency;
begin
 Rp := Fiyat.Text;
 Rp := StringReplace(Rp, ',', '', [rfReplaceAll, rfIgnoreCase]);
 Rp := StringReplace(Rp, '.', '', [rfReplaceAll, rfIgnoreCase]);
 Rph := StrToCurrDef(Rp, 0);
 Fiyat.Text := FormatCurr('#,###', Rph);
 Fiyat.SelStart := length(Fiyat.Text);
end;
Para formatına çevirmek için bu yöntemi kullanıyorum

farklı senaryolarda hata verecek procedure gibi,
programın çalıştığı bilgisayarın yerel ayarlarını düşünelim, kiminde ondalık ayracı nokta kiminde virgül,
sonra ondalık sonrası kaç hane tanımlı bir mi iki mi üç mü.

bu procedure sayıyı noktasız virgülsüz hale getiriyor sonra currency e çeviriyor, ondalık kaybolur

sayımız 1.234,56 olsun   1.234 tam kısım, 56 ondalık kısım
bu procedure ile sayımız önce 123456 olur
sonra 123.456 olur


Parayı çarpma ve toplama işlemi - serhat - 17-06-2017

Farklı bilgisayarlarda sıkıntı yaşamamak için ne yapmalıyım?


Parayı çarpma ve toplama işlemi - meko - 17-06-2017

yukarda vermiştim tekrar yazıyorum

var
 WFormatoBR: TFormatSettings;
begin
 WFormatoBR                     := TFormatSettings.Create;
 WFormatoBR.DecimalSeparator    := ',';
 WFormatoBR.ThousandSeparator   := '.';
 System.SysUtils.FormatSettings := WFormatoBR;
end;

kullanıcının sayısal işlem girişlerinde kullanabileceğin ücretsiz/ücretsiz componentler mevcut

ilk aklıma gelen
http://jvcl.delphi-jedi.org/


Parayı çarpma ve toplama işlemi - meko - 17-06-2017

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
 if not (Key in [#8, '0'..'9', '-', DecimalSeparator]) then
   ShowMessage('Invalid key: ' + Key);
   Key := #0;
 end
 else if ((Key = DecimalSeparator) or (Key = '-')) and 
         (Pos(Key, Edit1.Text) > 0) then begin
   ShowMessage('Invalid Key: twice ' + Key);
   Key := #0;
 end
 else if (Key = '-') and 
         (Edit1.SelStart <> 0) then begin
   ShowMessage('Only allowed at beginning of number: ' + Key);
   Key := #0;
 end;
end;

internetten bulduğum kod parçası kendine göre uyarlayabilirsin