Yorumları: 95
Konuları: 45
Kayıt Tarihi: 10-02-2017
Rep Puanı: 67 Başlangıç
selamın aleyküm hayırlı ramazanlar;
Listviewde 2 tane parasal 1 tanede adet alanım var, Yani ürün fiyatı * adet = toplam olacak.
Örnek:
125.000 * 5 = 625.000 TL
150 * 3 = 450 TL olacak, fakat bir türlü çarpma işlemini yaptıramadım sürekli hata alıyorum bu konuda yardımcı olur musunuz.
procedure TForm4.Hesap(Sender: TObject); // Hesaplama
var
Fiyat, Adet, Toplam: Real;
//: Currency;
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(Items[I].SubItems[2]);
Adet := strtofloat(Items[I].SubItems[3]);
Items[I].SubItems[4] := floattostr(Fiyat * Adet);
// Toplam := Toplam + StrToInt(Items[I].SubItems[5]);
// LabelToplam.Caption := 'Toplam: ' + Format(' %e', [Toplam]);
end;
finally
Items.EndUpdate;
end;
end;
end;
end;
Hata kodu: First chance exception at $752E845D. Exception class EConvertError with message ''500.000' is not a valid floating point value'. Process Follow.exe (5424)
Yorumları: 53
Konuları: 4
Kayıt Tarihi: 28-04-2017
Rep Puanı: 174 Başlangıç
real sayılar ondalıklı sayılardır bu işlemleri yapabilmek için nokta(.) değil virgül(,) kullanmak gerekir hatanın sebebi budur.
Yorumları: 970
Konuları: 44
Kayıt Tarihi: 24-07-2016
Aktif Kullandığınız Delphi Sürümü:
Rep Puanı: 2.712 Uzman
1000'lik ayırıcı kullanma yada dönüşümde sil.
Ağlarsa kablosuz ağlar, gerisi yerel ağlar...
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
16-06-2017, Saat: 22:38
(Son Düzenleme: 16-06-2017, Saat: 22:45, Düzenleyen: DelphiCan.)
var
WFormatoBR: TFormatSettings;
begin
WFormatoBR := TFormatSettings.Create;
WFormatoBR.DecimalSeparator := ',';
WFormatoBR.ThousandSeparator := '.';
System.SysUtils.FormatSettings := WFormatoBR;
end;
gibi yöntemle ondalık ve binlik ayıracını kendi kullanım için ayarlayabilirsin.
Yorumları: 95
Konuları: 45
Kayıt Tarihi: 10-02-2017
Rep Puanı: 67 Başlangıç
16-06-2017, Saat: 23:28
(Son Düzenleme: 16-06-2017, Saat: 23:28, Düzenleyen: serhat.)
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;
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
16-06-2017, Saat: 23:33
(Son Düzenleme: 16-06-2017, Saat: 23:37, Düzenleyen: meko.)
15,000
onbeşbin mi? onbeş mi?
Yorumları: 4.224
Konuları: 379
Kayıt Tarihi: 07-07-2016
Aktif Kullandığınız Delphi Sürümü:
Rep Puanı: 16.975 Üstad
16-06-2017, Saat: 23:42
(Son Düzenleme: 16-06-2017, Saat: 23:44, Düzenleyen: TescilsizUzman.)
(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)
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
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); // eski hali
Items[I].SubItems[4] := formatfloat('###.##0,000',Fiyat * Adet); //deneme hali
end;
finally
Items.EndUpdate;
end;
binlik ayıracı = . (nokta)
ondalık ayıracı = , (virgül)
kodu bir de böyle deneyin
Yorumları: 95
Konuları: 45
Kayıt Tarihi: 10-02-2017
Rep Puanı: 67 Başlangıç
Cevaplar için teşekkür ederim.
Yorumları: 295
Konuları: 24
Kayıt Tarihi: 05-09-2016
Rep Puanı: 1.248 Programcı
formatfloat komutunu kullanabilirsin yazdırırken
formatfloat('0,00',25);
|