Delphi Can

Orjinalini görmek için tıklayınız: Parayı çarpma ve toplama işlemi
Şu anda (Arşiv) modunu görüntülemektesiniz. Orjinal Sürümü Görüntüle internal link
Sayfalar: 1 2
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)
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.
1000'lik ayırıcı kullanma yada dönüşümde sil.
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.
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;
15,000
onbeşbin mi? onbeş mi?
(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)
     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
Cevaplar için teşekkür ederim.
formatfloat komutunu kullanabilirsin yazdırırken
formatfloat('0,00',25);
Sayfalar: 1 2