parasal değerin son 2 rakamdan sonrasının yuvarlanmaması

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
Biltes
Üye
Mesajlar: 361
Kayıt: 11 Oca 2005 02:24
Konum: Edirne

parasal değerin son 2 rakamdan sonrasının yuvarlanmaması

Mesaj gönderen Biltes »

Arkadaşlar kolay gelsin,

Yapılan bir matematiksel işlemin sonucunda (82,3576470588235) gibi çıkan bir sonuçta ben ,0.00 bu formatlama şeklini kullanıyorum ama forumda bahsedilen tüm formatlama şekillerini kullandım sürekli olan sonuç otomatik olarak (82,36) oluyor 3.değer 5'ten büyük olduğu için yukarı tamamlıyor. Benim istediğim çıkan sonuç neyse virgülden sonra sadece 2 rakamı alması yani (82,35) olarak kalmasını istiyorum bunu kod olarak yada nasıl bir display formatı ile bu şekilde bıraktırırım.

Yardımlarınız için şimdiden çok tşk ederim. Herkese kolay gelsin...
Var olmaya değer her şey bilinmeye de değerdir. Çünkü bilgi varlığın bir imgesidir. Onda iyi ve kötü aynı anda bulunmaktadır...
Kullanıcı avatarı
vkamadan
Kıdemli Üye
Mesajlar: 1935
Kayıt: 17 Mar 2004 03:52
Konum: Adapazarı
İletişim:

Mesaj gönderen vkamadan »

Merhaba,
uses bölümüne math ekledikten sonra,

Kod: Tümünü seç

function Yuvarla(x: Extended; d: Integer): Extended;
var
  n: Extended;
begin
  n := Power(10, d);
  x := x * n;
  Result := (system.Int(x) + system.Int(Frac(x) * 2)) / n;
end;
Fonksiyonunu tanımlayın,
Kullanımı şöyle,

Kod: Tümünü seç

 YuvarlanmisDeger:= Yuvarla (YuvarlanacakSayi , 2);
// Burada fonksiyona geçtiğim ikinci parametre yani 2 değeri virgülden sonra kaç haneye yuvarllanacağını belirtir.
Kolay gelsin.
Volkan KAMADAN
www.polisoft.com.tr
Kullanıcı avatarı
Biltes
Üye
Mesajlar: 361
Kayıt: 11 Oca 2005 02:24
Konum: Edirne

Mesaj gönderen Biltes »

Volkan bey ilginiz için çok tşk ederim,

Dediklerinizi aynen yaptım 82,36'dan sonraki değerleri göstermiyor sonuçta ama benim istediğim değerin hiç bir şekilde yuvarlanmadan 82,35 kalması ilk çıkana değer (82,3576470588235) buydu fonksiyondan sonra 82,36 amaç 82,35 kalması yani hiç bir şekilde değişikliğe uğramadan sadece sondaki değerlerin yok edilmesi.

Yardımlarınız için çok tşk ederim.
Var olmaya değer her şey bilinmeye de değerdir. Çünkü bilgi varlığın bir imgesidir. Onda iyi ve kötü aynı anda bulunmaktadır...
Kullanıcı avatarı
Begin.End
Üye
Mesajlar: 45
Kayıt: 05 Nis 2007 11:50

Mesaj gönderen Begin.End »

Selamlar String parcalama komutu (copy) ıle yapabılırsınız sanırım.. Kolay gelsın
Kullanıcı avatarı
vkamadan
Kıdemli Üye
Mesajlar: 1935
Kayıt: 17 Mar 2004 03:52
Konum: Adapazarı
İletişim:

Mesaj gönderen vkamadan »

Merhaba,
Ozaman şöyle bir fonksiyon işinizi görür,

Kod: Tümünü seç

function SonIkiHaneAl(Deger: Extended): Extended;
var
SayiString,
Tam,Ondalik:String;
PointPos:Integer;
begin
  SayiString:=FloatToStr(Deger);
  PointPos:=Pos(DecimalSeparator,SayiString);

  if PointPos=0 then Result:=Deger else
   begin
      Tam:=Copy(SayiString,1,PointPos-1);
      Ondalik:=Copy(SayiString,PointPos+1, Length(SayiString)-PointPos);
      Ondalik:=Copy(Ondalik,1,2);
      Result:=StrToFloat(Tam+DecimalSeparator+Ondalik);
   end;
end;
Volkan KAMADAN
www.polisoft.com.tr
Kullanıcı avatarı
Biltes
Üye
Mesajlar: 361
Kayıt: 11 Oca 2005 02:24
Konum: Edirne

Mesaj gönderen Biltes »

Hocam ellerinize, emeğinize sağlık aynen dediğim gibi çok tşk ederim. İnanın o kadar makbule geçti ki anlatamam. İlgileriniz için çok tşk ederim.
Var olmaya değer her şey bilinmeye de değerdir. Çünkü bilgi varlığın bir imgesidir. Onda iyi ve kötü aynı anda bulunmaktadır...
Kullanıcı avatarı
sabanakman
Kıdemli Üye
Mesajlar: 3081
Kayıt: 17 Nis 2006 08:11
Konum: Ah bi Antalya olaydı keşke (Ankara)

Mesaj gönderen sabanakman »

Kod: Tümünü seç

function Sadele(const R:Real):Real;
begin
  Result:=int(R*100)/100;// veya Result:=Trunc(R*100)/100;
end;
Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .
Kullanıcı avatarı
ofenX
Üye
Mesajlar: 397
Kayıt: 09 Nis 2005 10:24
Konum: Diyarbakır
İletişim:

Mesaj gönderen ofenX »

Merhaba,
Demokraside çareler tükenmiyor. :lol: Bir yeşillik te bizden olsun.

Kod: Tümünü seç

procedure TForm1.Button1Click(Sender: TObject);
var
  x:real;

begin
      setroundmode(rmtruncate);
      x:=82.3576470588235;
      x:=roundto(x,-2);
      label1.Caption:=floattostr(x);
      // labeldaki rakam görünmüyor ama ben 82.35 görüyorum :)
   end;

****** uses math eklemeyi unutmayın.
Kolay gelsin.
http://www.aysbergbilgisayar.com
Logo Go özel eğitim, web tasarım, teknik servis
Cevapla