Yorumları: 95
Konuları: 45
Kayıt Tarihi: 10-02-2017
Rep Puanı: 67 Başlangıç
17-06-2017, Saat: 06:37
(Son Düzenleme: 17-06-2017, Saat: 06:51, Düzenleyen: serhat.)
(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 ) 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
Yorumları: 4.224
Konuları: 379
Kayıt Tarihi: 07-07-2016
Aktif Kullandığınız Delphi Sürümü:
Rep Puanı: 16.975 Üstad
17-06-2017, Saat: 11:20
(Son Düzenleme: 17-06-2017, Saat: 11:20, Düzenleyen: TescilsizUzman.)
(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 ) 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
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.
Yorumları: 283
Konuları: 1
Kayıt Tarihi: 13-03-2017
Aktif Kullandığınız Delphi Sürümü:
- Delphi 10.1
- Delphi XE7
- Delphi 7
Rep Puanı: 964 Acemi
17-06-2017, Saat: 11:50
(Son Düzenleme: 17-06-2017, Saat: 13:03, Düzenleyen: meko.)
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
Yorumları: 95
Konuları: 45
Kayıt Tarihi: 10-02-2017
Rep Puanı: 67 Başlangıç
Farklı bilgisayarlarda sıkıntı yaşamamak için ne yapmalıyım?
Yorumları: 283
Konuları: 1
Kayıt Tarihi: 13-03-2017
Aktif Kullandığınız Delphi Sürümü:
- Delphi 10.1
- Delphi XE7
- Delphi 7
Rep Puanı: 964 Acemi
17-06-2017, Saat: 18:47
(Son Düzenleme: 17-06-2017, Saat: 18:51, Düzenleyen: meko.)
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/
Yorumları: 283
Konuları: 1
Kayıt Tarihi: 13-03-2017
Aktif Kullandığınız Delphi Sürümü:
- Delphi 10.1
- Delphi XE7
- Delphi 7
Rep Puanı: 964 Acemi
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
|