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.
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
Smile TrayIcon ile BringToFront işlemi mcuyan 0 172 30-11-2023, Saat: 21:27
Son Yorum: mcuyan
  Delphide time alanını toplama shooterman 3 537 14-09-2023, Saat: 13:03
Son Yorum: shooterman
  farkli tablolardan verileri dataset e toplama sadikacar60 12 1.870 23-03-2023, Saat: 18:34
Son Yorum: sadikacar60
  Delphi 7 Veri Tabanı İşlemi Hakkında mahone 6 1.058 28-02-2023, Saat: 15:36
Son Yorum: mahone
  Rest Debugger ile POST işlemi 41linea41 0 456 18-10-2022, Saat: 20:25
Son Yorum: 41linea41



Konuyu Okuyanlar: 1 Ziyaretçi