Ondalık Cevirme

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
ozcank
Üye
Mesajlar: 937
Kayıt: 28 Nis 2005 05:29

Ondalık Cevirme

Mesaj gönderen ozcank »

Arkadaşlar Edit alanına toplam yazdırıyorum ama bir türlü 86.00 yazdıramadım 8.60 yada 08.60 yazıyor yardımcı olabilir misiniz?

Kod: Tümünü seç

Edit3.Text := FormatFloat(',0.00', Isk1T);

Kod: Tümünü seç

Edit3.Text := FormatFloat('#,###00.#00', Isk2T);
TADOQuery kullanıyorum.
Kullanıcı avatarı
sabanakman
Kıdemli Üye
Mesajlar: 3081
Kayıt: 17 Nis 2006 08:11
Konum: Ah bi Antalya olaydı keşke (Ankara)

Re: Ondalık Cevirme

Mesaj gönderen sabanakman »

Rakam 8.6 ise 86 yazamazsın zaten!
Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .
ozcank
Üye
Mesajlar: 937
Kayıt: 28 Nis 2005 05:29

Re: Ondalık Cevirme

Mesaj gönderen ozcank »

Normalde topladığımda 86.00 Excell de aktarıyorum 86.00 ama edit e aktardığımda 8.60 gözüküyor.
Kod şu şekilde ;

Kod: Tümünü seç

 Isk1T := 0; Isk2T := 0; Isk3T := 0;
      Isk4T := 0; Isk5T := 0; Isk6T := 0;
      First;
      while not Eof do
      begin
        Isk1T := Isk1T + FieldByName('Iskonto1').AsFloat;
        Isk2T := Isk2T + FieldByName('Iskonto2').AsFloat;
        Isk3T := Isk3T + FieldByName('Iskonto3').AsFloat;
        Isk4T := Isk4T + FieldByName('Iskonto4').AsFloat;
        Isk5T := Isk5T + FieldByName('Iskonto5').AsFloat;
        Isk6T := Isk6T + FieldByName('Iskonto6').AsFloat;
//        Gen_top := Gen_top + FieldByName('GENELTOPLAM').AsFloat;
        Next;
      end;
        Edit3.Text := FormatFloat('##.###,##', Isk1T);  
        Edit4.Text := FormatFloat('##.###,##', Isk2T);
        Edit5.Text := FormatFloat('##.###,##', Isk3T);
        Edit6.Text := FormatFloat('##.###,##', Isk4T);
        Edit7.Text := FormatFloat('##.###,##', Isk5T);
        Edit8.Text := FormatFloat('#,###00.#00', Isk6T);
//        Edit7.Text := FormatFloat('#,##0.#0', Gen_top); }
end;
End;
end


ozcank
Üye
Mesajlar: 937
Kayıt: 28 Nis 2005 05:29

Re: Ondalık Cevirme

Mesaj gönderen ozcank »

Arkadaşlar bir fikir verebilir misiniz kafayı yiyecem çözemedim bir türlü.
Kullanıcı avatarı
sabanakman
Kıdemli Üye
Mesajlar: 3081
Kayıt: 17 Nis 2006 08:11
Konum: Ah bi Antalya olaydı keşke (Ankara)

Re: Ondalık Cevirme

Mesaj gönderen sabanakman »

Olay düşündüğünüz noktadan çok farklı yerden patlak veriyor. Kaldı ki, bu mantıksal bir hatadır ve çözüme ulaşmak için çok geniş bir inceleme yapmak gerekmektedir. Elimizde sihirli küre olsa onun bile problemi çözebileceğinden emin değilim :mrgreen: .

+Mesela Iskonto1, Iskonto2, .., Iskonto6 alan tipleriniz string değil sayısal tipte bir alan ise..:
->Toplamlarınız gerçekten 86 değil 8.6 dır.
--Bu durumda kayıtlarınızı incelemeniz gerekmektedir. Özellikle DataSet ile o anda açık olan kayıtların toplamı 8.6 dır. Bir ihtimal filtrelenmiş kayıtlar yüzünden bazı kayıtlar gelmemiş ve bu yüzden toplamınız küçük çıkıyor olabilir.
--Bir de with ... do ile iç içe DataSet ler kullandıysanız First, Eof, FieldByName, Next gibi metotlar düşündüğünüz DataSet üzerinde çalışmıyor olabilir.

+Eğer alan tipiniz string ise..:
-Bölge ve dil seçeneklerinde bulunan nokta ve virgül yüzünden String bilgilerin rakama dönüşmesi esnasında düşündüğünüzden farklı değerde geliyor olabilir.

Kısacası bu kayıtların açılıp, toplam alınma işleminin sonuna kadar geçen süreçte nerede ne yapıldıysa ona bağlı sonuç almaktasınız.
Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .
ozcank
Üye
Mesajlar: 937
Kayıt: 28 Nis 2005 05:29

Re: Ondalık Cevirme

Mesaj gönderen ozcank »

Bölge dil ayarlarını değiştirdim olmadı . DBGrid de ki alanları toplatıyorum DBGrid ekranda doğru herşey toplamımda sanırım var.
ozcank
Üye
Mesajlar: 937
Kayıt: 28 Nis 2005 05:29

Re: Ondalık Cevirme

Mesaj gönderen ozcank »

7,7 + 30,8 + 47,5 grid alanlarda bu şekilde
thelvaci
Kıdemli Üye
Mesajlar: 770
Kayıt: 11 Tem 2010 07:17
Konum: Istanbul
İletişim:

Re: Ondalık Cevirme

Mesaj gönderen thelvaci »

Basit bir button'un altına aşağıdaki kodu yapıştırdığınızda çıktı olarak istediğinizi görebiliyor musunuz ?

Kod: Tümünü seç

var
  dValue : Double;
begin
  dValue := 86.0;
  ShowMessage(FormatFloat(',0.00', dValue));
end;
ozcank
Üye
Mesajlar: 937
Kayıt: 28 Nis 2005 05:29

Re: Ondalık Cevirme

Mesaj gönderen ozcank »

evet 86,00 olarak gördüm
ozcank
Üye
Mesajlar: 937
Kayıt: 28 Nis 2005 05:29

Re: Ondalık Cevirme

Mesaj gönderen ozcank »

pardon 86.00
thelvaci
Kıdemli Üye
Mesajlar: 770
Kayıt: 11 Tem 2010 07:17
Konum: Istanbul
İletişim:

Re: Ondalık Cevirme

Mesaj gönderen thelvaci »

O zaman sorununuz, FormatFloat'ın format string'in de değil. Sizin değerleriniz istediğiniz şekilde değil. Bence debug edip bunu incelemelisiniz.
ozcank
Üye
Mesajlar: 937
Kayıt: 28 Nis 2005 05:29

Re: Ondalık Cevirme

Mesaj gönderen ozcank »

Isk1T := Isk1T + FieldByName('Iskonto1').AsFloat; bu alanı nasıl showmessage de görebilirim?
ozcank
Üye
Mesajlar: 937
Kayıt: 28 Nis 2005 05:29

Re: Ondalık Cevirme

Mesaj gönderen ozcank »

Debug ederek baktım sorun yok gibi duruyor bu alana nasıl bir değer geliyor onu göremedim

Isk1T := Isk1T + FieldByName('Iskonto1').AsFloat;
ozcank
Üye
Mesajlar: 937
Kayıt: 28 Nis 2005 05:29

Re: Ondalık Cevirme

Mesaj gönderen ozcank »

Excel aktarım yaptığım da yuvarlama yapıyor mesela 1,386 Excel de 1,4 gözüküyor yuvarlamasını istemiyorum

Kod: Tümünü seç

Sheet.Cells[Row,Col].NumberFormat := '0.00'; // Tutar 1
Lord_Ares
Üye
Mesajlar: 1070
Kayıt: 15 Eki 2006 04:33
Konum: Çorlu

Re: Ondalık Cevirme

Mesaj gönderen Lord_Ares »

Bildiğim kadarıyla excelin hücre ayarları ve bilgisayarınızın decimal ayarları ile bu sorunu çözebilirsiniz. Excelin o şekilde yuvarlamasının mantığı belli bir yapıya dayalıdır oda şöyleki virgülden sonraki ikinci rakam 5 ten büyük ise virgülden sonraki ikinci rakamı kendisine yakın bir üst tamsayıya yuvarlar.Tam tersi 5 ten küçük ise bir alt tam sayı olarak gösterir. (Decimal ayarlarınız standart ise farklı bir ayar , birim kullanmadıysanız geçerli ) Bunu şöyle test edebilirsiniz 1,386 yerine 1,336 olarak denerseniz 1,4 yerine 1,3 olarak atadığını görebilirsiniz. Dolayısı ile bilgisayarınızın ve office porgramınızın decimal ayarlarını her kurduğunuz pc de ayarlamaktansa programınız içinde küçük bir fonksiyon kullanarak sorunu aşmış olabilirsiniz. Yukarıda bahsettiğim olaydan önce tabiki databasinizdeki alanın ve editin decimal ayarlarını kontrol edin. Doğruluğundan eminseniz bu yola başvurun.
Saygılarımla
Cevapla