for j:=1 to 11 do begin
For i:=1 to 6 do begin
format:= strtocurr(Odenekgrid.Cells[i,j]);
Odenekgrid.Cells[i,j]:=Formatcurr('#,###',format);
End;
end;
formatcurr işleminden sonra toplama işlemi
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
formatcurr işleminden sonra toplama işlemi
Aşağıdaki kod ile stringgrid içindeki sayıları örnek olarak 1.500,1.300 vs. yapıyorum. Ancak bu sayıları daha sonra toplarken is not a valid floating point value hatası alıyorum. Eski hallerine de çevirmeye kalksam aynı hatayı alıyorum. Nasıl yapabilirim acaba ?
DOĞUNUN SINIR TAŞI ERZURUM'UN DADAŞ'I
EFE'Sİ VAR İZMİR'İN EĞİLMEZ TÜRK' ÜN BAŞI
EFE'Sİ VAR İZMİR'İN EĞİLMEZ TÜRK' ÜN BAŞI
Re: formatcurr işleminden sonra toplama işlemi
"format" delphi nin bir function adıdır, değişken olarak kullanamazsın. Bunlara dikkat edin.
neden curr? float değil?
neden curr? float değil?
ZAGOR TENAY TÜRK'tür... TÜRK kalacak...
Zoru başarırım, İmkansız zaman alır
FreeMan 35.5
Soru sormaya üşenmiyorsan, sorunun çözümünü yazmaya da üşenme !!!
Zoru başarırım, İmkansız zaman alır
FreeMan 35.5
Soru sormaya üşenmiyorsan, sorunun çözümünü yazmaya da üşenme !!!
Re: formatcurr işleminden sonra toplama işlemi
Merhaba,
Eski haline çevirme kodunuzu paylaşabilir misiniz? Muhtemelen o noktada bir hatanız var.
Kullandığınız değişken isimlerini daha dikkatli seçmeniz konusuna bende katılıyorum. Yerel değişkenler (sadece prosedür/fonksiyon içinde kullanılan) için İngilizce Local, Türkçe yerel anlamında başına L harfi ekleyebilirsiniz mesela.
Re: formatcurr işleminden sonra toplama işlemi
Eski hali derken virgülleri kaldırıp işlem yapmak için aşağıdaki gibi dezeltmeye çalışırken hata alıyorum. Biraz acemice bir yöntem olduğunu düşünüyorumertank yazdı: ↑23 Haz 2021 10:42Merhaba,
Eski haline çevirme kodunuzu paylaşabilir misiniz? Muhtemelen o noktada bir hatanız var.
Kullandığınız değişken isimlerini daha dikkatli seçmeniz konusuna bende katılıyorum. Yerel değişkenler (sadece prosedür/fonksiyon içinde kullanılan) için İngilizce Local, Türkçe yerel anlamında başına L harfi ekleyebilirsiniz mesela.
for j:=1 to 11 do begin
For i:=1 to 6 do begin
format:= strtocurr(Odenekgrid.Cells[i,j]);
Odenekgrid.Cells[i,j]:=Formatcurr('#',format);
End;
end;
DOĞUNUN SINIR TAŞI ERZURUM'UN DADAŞ'I
EFE'Sİ VAR İZMİR'İN EĞİLMEZ TÜRK' ÜN BAŞI
EFE'Sİ VAR İZMİR'İN EĞİLMEZ TÜRK' ÜN BAŞI
Re: formatcurr işleminden sonra toplama işlemi
Paylaştığınız kod virgül kaldırma yapmıyor. Eğer tüm hücrelerde rakam var ise, siz tüm hücrelerin toplamını almak istiyor iseniz. Aşağıdaki gibi bir kod kullanabilirsiniz.
Örnek kod test edilmedi. Delphi 10.3 ile derlenebiliyor. Eğer Delphi 7 gibi eski bir sürüm kullanıyor iseniz belli noktalarda (FormatSettings Delphi 7'de mevcut değildir) düzenlemeler yapmanız gerekecektir. Eğer sistemde tanımlı olandan başka bir para birimi simgesi/ifadesi kullanıyor iseniz bunu da ek olarak TempString içinden silmeniz gerekecektir.
Kod: Tümünü seç
procedure TForm2.Button1Click(Sender: TObject);
var
I: Integer;
I2: Integer;
Toplam: Double;
TempString: string;
TempDouble: Double;
AFormatSettings: TFormatSettings;
begin
AFormatSettings := TFormatSettings.Create('en-US'); // nokta ondalık ayracı olarak kullanılacak
Toplam := 0;
for I := 1 to 11 do
begin
for I2 := 1 to 6 do
begin
TempString := Odenekgrid.Cells[I2, I];
// Binlik ayraçlarını siliyoruz
TempString := StringReplace(TempString, FormatSettings.ThousandSeparator, EmptyStr, [rfReplaceAll]);
// Ondalık işaretini nokta olarak değiştiriyoruz (eğer noktadan farklı ise)
TempString := StringReplace(TempString, FormatSettings.DecimalSeparator, '.', []);
// Para birimi ifadesi kaldırılıyor
TempString := StringReplace(TempString, FormatSettings.CurrencyString, EmptyStr, []);
// Boşluk karakterleri kaldırılıyor
TempString := StringReplace(TempString, ' ', EmptyStr, [rfReplaceAll]);
if TempString <> EmptyStr then
begin
if TryStrToFloat(TempString, TempDouble, AFormatSettings) then
begin
Toplam := Toplam + TempDouble;
end
else
begin
// Hata oluştu. Dönüşüm yapılamadı. sebebi incelenmeli. Burada duruma göre log kaydı tutulabilir.
end;
end;
end;
end;
ShowMessage('Toplam: ' + FloatToStr(Toplam));
end;
Re: formatcurr işleminden sonra toplama işlemi
Cevaplar için teşekkür ederim aşağıdaki kod ile noktaları kaldırıp sonrasında toplama işlemini yaptırdım sıkıntı çıkmadı. Yine biraz acemice olmuş olabilir ama işimi gördü.
var
s, sil: string;
i,j:integer;
begin
for j:=1 to 11 do begin
For i:=1 to 6 do begin
s := Odenekgrid.Cells[i,j];
sil := '.';
While Pos(sil,S)>0 do Delete(s,Pos(sil,S),length(sil));
Odenekgrid.Cells[i,j]:=s;
end;
end;
DOĞUNUN SINIR TAŞI ERZURUM'UN DADAŞ'I
EFE'Sİ VAR İZMİR'İN EĞİLMEZ TÜRK' ÜN BAŞI
EFE'Sİ VAR İZMİR'İN EĞİLMEZ TÜRK' ÜN BAŞI
Re: formatcurr işleminden sonra toplama işlemi
Tavsiyem, @ertank ın kodunu kullanman.
"FormatSettings.ThousandSeparator" ile senin yazdığın "sil := '.';" arasındaki fark, senin kodun, işletim sisteminin ayarları değiştirildiğinde kodun hata verir. Başka makinalarda çalışırsa, bölgesel ayarlar değiştirildiğinde vs vs
StringReplace(TempString, FormatSettings.ThousandSeparator, EmptyStr, [rfReplaceAll]);
ile senin yaptığın döngü, aynı sonuç döndürür ama yukarıdaki kodun hata döndündürme ihtimali yok
While Pos(sil,S)>0 do Delete(s,Pos(sil,S),length(sil));
yaptım oldu diyorsan başka tabi.
"FormatSettings.ThousandSeparator" ile senin yazdığın "sil := '.';" arasındaki fark, senin kodun, işletim sisteminin ayarları değiştirildiğinde kodun hata verir. Başka makinalarda çalışırsa, bölgesel ayarlar değiştirildiğinde vs vs
StringReplace(TempString, FormatSettings.ThousandSeparator, EmptyStr, [rfReplaceAll]);
ile senin yaptığın döngü, aynı sonuç döndürür ama yukarıdaki kodun hata döndündürme ihtimali yok
While Pos(sil,S)>0 do Delete(s,Pos(sil,S),length(sil));
yaptım oldu diyorsan başka tabi.
ZAGOR TENAY TÜRK'tür... TÜRK kalacak...
Zoru başarırım, İmkansız zaman alır
FreeMan 35.5
Soru sormaya üşenmiyorsan, sorunun çözümünü yazmaya da üşenme !!!
Zoru başarırım, İmkansız zaman alır
FreeMan 35.5
Soru sormaya üşenmiyorsan, sorunun çözümünü yazmaya da üşenme !!!