Sayı arttırma ve azaltma
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
Sayı arttırma ve azaltma
Merhabalar;
Noktalı bir sayıyı 1000 arttırma ve 1000 azaltma yaptırmak istiyorum fakat çıkamadım işin içinden...
Örnek: 23.4545 den 1000 azalttığımda 23.3545 olacak bu işlemi nasıl yapabilirim.
StrtoFloat('23.4145')
Noktalı bir sayıyı 1000 arttırma ve 1000 azaltma yaptırmak istiyorum fakat çıkamadım işin içinden...
Örnek: 23.4545 den 1000 azalttığımda 23.3545 olacak bu işlemi nasıl yapabilirim.
StrtoFloat('23.4145')
Re: Sayı arttırma ve azaltma
StrtoFloat('23.4145')-0.1 yaparsan olur o iş, yada x-1/10 yaparsan 0.1 azaltırsın 1/100 yaparsan 0.01 azaltırsın ondalık kısmın neresiyle oynıyacağına bağlı olarak bölersin olur biter, onda bir, yüzde bir, binde bir gibi
Re: Sayı arttırma ve azaltma
Sayın esistem;
Dediğiniz gibi bir çok yöntem denedim fakat sanırım başaramadım; fakat sanırım sorunumu tam anlatamadım 23.4545 den 1000 sayısı çıkartırken 23.3545 ise 23.0100 den 1000 sayısı çıkarıldığında kalan 22.0100 olmalı umarın anlatabilmişimdir...
esistem yazdı:StrtoFloat('23.4145')-0.1 yaparsan olur o iş, yada x-1/10 yaparsan 0.1 azaltırsın 1/100 yaparsan 0.01 azaltırsın ondalık kısmın neresiyle oynıyacağına bağlı olarak bölersin olur biter, onda bir, yüzde bir, binde bir gibi
Dediğiniz gibi bir çok yöntem denedim fakat sanırım başaramadım; fakat sanırım sorunumu tam anlatamadım 23.4545 den 1000 sayısı çıkartırken 23.3545 ise 23.0100 den 1000 sayısı çıkarıldığında kalan 22.0100 olmalı umarın anlatabilmişimdir...
- fesiharslan
- Üye
- Mesajlar: 591
- Kayıt: 20 Eki 2006 11:37
- Konum: Erzurum
- İletişim:
Re: Sayı arttırma ve azaltma
Merhaba;
Inc fonksiyonu ile sayısal bir değeri istediğiniz miktarda artırabilir, Dec fonksiyonu ile de istediğiniz miktarda azaltabilirsiniz.
Örneğin;
Yukarıdaki örnekte Sayı=234545, YeniSayi= 233545 olacaktır.
İyi çalışmalar...
Inc fonksiyonu ile sayısal bir değeri istediğiniz miktarda artırabilir, Dec fonksiyonu ile de istediğiniz miktarda azaltabilirsiniz.
Örneğin;
Kod: Tümünü seç
Sayı:=234545;
YeniSayi:=Dec(Sayı,1000);
İyi çalışmalar...
Re: Sayı arttırma ve azaltma
Fesiharslan hocam yanılıyorsam düzeltin; arkadaş float sayıdan integer sayıyı çıkarmak istiyor sizin verdiğiniz örnek integer...
İşi bilen yardım eder, az bilen akıl verir, bilmeyen eleştirir, yapamayan ise çamur atar...
Re: Sayı arttırma ve azaltma
Tekrar selam arkadaşlar.
Sonuca yaklaştım, fakat virgül ile ayırma işlemi bir türlü olmadı, toplama işlemi gerçekleşiyor sonuç "291,320" veriyor fakat olması gereken ise "29,1320" virgül yanlış yerde bu neden kaynaklı olabilir...
Sonuca yaklaştım, fakat virgül ile ayırma işlemi bir türlü olmadı, toplama işlemi gerçekleşiyor sonuç "291,320" veriyor fakat olması gereken ise "29,1320" virgül yanlış yerde bu neden kaynaklı olabilir...
Kod: Tümünü seç
procedure TForm1.Button3Click(Sender: TObject);
var
Say: String;
Total: Extended;
begin
Say := StringReplace('29,0320', ',', '', [rfReplaceAll]);
Total := StrToInt(Say) + 1000;
Caption := FormatFloat('##,####', StrToFloat(FloatToStr(Total)));
end;
- fesiharslan
- Üye
- Mesajlar: 591
- Kayıt: 20 Eki 2006 11:37
- Konum: Erzurum
- İletişim:
Re: Sayı arttırma ve azaltma
Merhaba;
Sayının StringReplace işlemine tabi tutulması, sayısal işlemde mantıksal hataya sebep oluyor. Yani nokta siliniyor ve sayı integer'a dönüşmüş oluyor. Ortaya çok farklı bir sayı çıkıyor.
StringReplace fonksiyonu yerine FormatSettings kullanılmalıdır.
Float tipine bir değişkeni kullanmadan önce veya formunun OnCreate olayına yazın. Aşağıdaki gibi kullanabilirsiniz.
İyi çalışmalar...
Sayının StringReplace işlemine tabi tutulması, sayısal işlemde mantıksal hataya sebep oluyor. Yani nokta siliniyor ve sayı integer'a dönüşmüş oluyor. Ortaya çok farklı bir sayı çıkıyor.
StringReplace fonksiyonu yerine FormatSettings kullanılmalıdır.
Float tipine bir değişkeni kullanmadan önce veya formunun OnCreate olayına yazın. Aşağıdaki gibi kullanabilirsiniz.
Kod: Tümünü seç
SysUtils.FormatSettings.DecimalSeparator := ',';
En son fesiharslan tarafından 04 Haz 2016 12:04 tarihinde düzenlendi, toplamda 2 kere düzenlendi.
Re: Sayı arttırma ve azaltma
Öncelikle 29,0320 yi 29.0320 yapman lazım replace ile virgülü boşluk yaparsan yeni sayın 290320 olur tabiki bundan 1000 eksiltirsen yanlış sonucu alırsın, x-(1/10) yaparsan istediğin sonucu alırsın, sen ondalık kısımdan sayı çıkartmaya çalışıyosun,Dostk yazdı:Kod: Tümünü seç
procedure TForm1.Button3Click(Sender: TObject); var Say: String; Total: Extended; begin Say := StringReplace('29,0320', ',', '', [rfReplaceAll]); Total := StrToInt(Say) + 1000; Caption := FormatFloat('##,####', StrToFloat(FloatToStr(Total))); end;
ayrıca; 23.0100 den senin anlattığın mantıkla 1000 eksiltirsen 22,9100 kalmazmı?
Re: Sayı arttırma ve azaltma
Sanırım bu işinizi çözecektir...
Kod: Tümünü seç
Showmessage(FormatFloat('##''.''####', StrToFloat(FloatToStr(Total))));
İşi bilen yardım eder, az bilen akıl verir, bilmeyen eleştirir, yapamayan ise çamur atar...
Re: Sayı arttırma ve azaltma
Merhaba,Dostk yazdı:Dediğiniz gibi bir çok yöntem denedim fakat sanırım başaramadım; fakat sanırım sorunumu tam anlatamadım 23.4545 den 1000 sayısı çıkartırken 23.3545 ise 23.0100 den 1000 sayısı çıkarıldığında kalan 22.0100 olmalı umarın anlatabilmişimdir...
Sizin yukarıda verdiğiniz örneğe göre durumu ben anlayamadım. Çünkü;
23.4545 - 0.1 = 23.3545
23.0100 - 1.0 = 22.0100
Bu durumda siz bazen 0.1, bazen de 1.0 rakamını çıkarıyorsunuz. Anlayamadığım konu ise bunu hangi durumda yapmamız gerektiği. Yani koşul nedir? Kendi adıma ancak koşul belli olduktan sonra tam anlamı ile yardımcı olabilirim.
Bununla birlikte, sizin verdiğiniz kod örneği ile ilgili aşağıdaki gibi bir düzenleme öneriyorum:
Kod: Tümünü seç
procedure TForm10.Button1Click(Sender: TObject);
var
Say: String;
// Extended ile Double her ikisi de sizin verdiğiniz ondalık hane derinliğinde aynı çalışır.
// Ancak Extended kullanır iseniz 64bit sistemlerde (64bit derlenmiş EXE'den bahsetmiyorum) aslında Double kullanmış gibi olacaksınız.
// Detaylı açıklama için Extended ile ilgili Delphi yardım kısmını okuyabilirsiniz.
Total: Double;
begin
// Ondalık işareti genelde bir tane olur. Dolayısı ile aşağıdaki StringReplace içine [rfReplaceAll] eklemeye gerek görmedim.
Say := StringReplace('29,0320', System.SysUtils.FormatSettings.ThousandSeparator, System.SysUtils.FormatSettings.DecimalSeparator, []);
// Aşağıdaki satırdan itibaren koşula göre 0.1 ile 1.0 arasında karar vermek gerekli.
Total := StrToFloat(Say) + 0.1;
// FormatFloat içinde virgül binlik ayracıdır. Nokta ondalık ayracıdır. Bu her zaman böyledir. FormatSettings.DecimalSeparator ile ilgisi yoktur.
// FormatFloat geriye çevirdiği string içinde noktayı işletim sisteminde tanımlı olan ondalık işareti ile değiştirir.
// Eğer Hep 4 ondalık hane kullanılacak ise aşağıdaki gibi bir Format tanımı vermek daha doğru olacaktır.
// Böylece 22.01 gibi bir rakam 22.0100 şeklinde gösterilir. Eğer '#.####' gibi bir format kullanılır ise sonuç 23.01 şeklinde kalacaktır.
// Total değişkenini Extended türünde kullansanız dahi FormatFloat() içinde direk kullanabilirsiniz. StrToFloat(FloatToStr(Total)) yapmanıza gerek yok
Caption := FormatFloat('#.0000', Total);
end;