Konuyu Oyla:
  • Derecelendirme: 0/5 - 0 oy
  • 1
  • 2
  • 3
  • 4
  • 5
Parayı çarpma ve toplama işlemi
#11
(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
Cevapla
#12
(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.
DelphiCan'dır!
Cevapla
#13
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
Cevapla
#14
Farklı bilgisayarlarda sıkıntı yaşamamak için ne yapmalıyım?
Cevapla
#15
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/
Cevapla
#16
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
Cevapla


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  Windows Explorer dan delphi formuna dosya Drag&Drop işlemi örneği adelphiforumz 1 572 23-01-2025, Saat: 15:16
Son Yorum: yhackup
  unidbgird tek enterde edit ve post ıslemi mehmet07 1 540 05-01-2025, Saat: 15:44
Son Yorum: mehmet07
  WebModule Multipart File Upload İşlemi pro_imaj 5 1.057 11-12-2024, Saat: 17:44
Son Yorum: pro_imaj
  Minimize İşlemi hakkında adelphiforumz 2 1.035 24-06-2024, Saat: 11:50
Son Yorum: adelphiforumz
  store procedure ile toplama islemi sadikacar60 5 1.479 22-04-2024, Saat: 12:50
Son Yorum: bydelphi



Konuyu Okuyanlar: 1 Ziyaretçi