Parayı çarpma ve toplama işlemi - Baskı Önizleme +- Delphi Can (https://www.delphican.com) +-- Forum: Delphi (https://www.delphican.com/forumdisplay.php?fid=3) +--- Forum: Genel Programlama (https://www.delphican.com/forumdisplay.php?fid=6) +--- Konu Başlığı: Parayı çarpma ve toplama işlemi (/showthread.php?tid=1077) Sayfalar:
1
2
|
Parayı çarpma ve toplama işlemi - serhat - 16-06-2017 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) Parayı çarpma ve toplama işlemi - Javs - 16-06-2017 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. Parayı çarpma ve toplama işlemi - engerex - 16-06-2017 1000'lik ayırıcı kullanma yada dönüşümde sil. Parayı çarpma ve toplama işlemi - meko - 16-06-2017 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. Parayı çarpma ve toplama işlemi - serhat - 16-06-2017 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; Parayı çarpma ve toplama işlemi - meko - 16-06-2017 15,000 onbeşbin mi? onbeş mi? Cvp: Parayı çarpma ve toplama işlemi - TescilsizUzman - 16-06-2017 (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? 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) Parayı çarpma ve toplama işlemi - meko - 16-06-2017 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 Parayı çarpma ve toplama işlemi - serhat - 17-06-2017 Cevaplar için teşekkür ederim. Parayı çarpma ve toplama işlemi - CaglarCoskun - 17-06-2017 formatfloat komutunu kullanabilirsin yazdırırken formatfloat('0,00',25); |