ListBox'taki Değerlerin Ortalamasını Aldırmak

Başlatan vitruvius, 16 Mayıs 2011, 02:54:02

vitruvius

Merhabalar, şu an ortam sıcaklığını bilgisayara aktaran bir devre üzerinde çalışıyorum. Sıcaklık verileri düzenli olarak listbox'ın içine düşüyor. Ben bir buton yardımıyla bu değerlerin ortalamasını almak istiyorum.

Değerler listbox'a  Sicaklik: xy.z  şeklinde düşüyor. Buradaki virgülden önceki kısım olan xy'yi ve sonraki kısım olan z'yi substringler ile ayırıyorum. Daha sonra z'yi 10'a bölüp xy ile topluyorum ve sayımı elde ediyorum. Ancak gelen veri kadar değeri toplayacak bir döngü yazamadım. Yardımcı olursanız sevinirim.

Substring kısmını şu şekilde yapıyorum:

string cumle;
            int pozisyon, pozisyon2, i;
cumle = listBox1.Items[i].ToString(); //Buradaki i for döngüsünde deneme amaçlıydı
                pozisyon = (cumle.IndexOf(".") + 1);
                pozisyon2 = (cumle.IndexOf(":") + 2);

                ondalik = Convert.ToDouble(cumle.Substring(pozisyon, 1));
                tam = Convert.ToDouble(cumle.Substring(pozisyon2, cumle.Length - (pozisyon2 + 2)));
                toplam = (tam + (ondalik / 10));

RcALTIN

#1
üzerinden baya gün geçmiş ama yeni gördüm bişeler yazayım...

listbox'a, değerleri nokta yerine virgülle ayrılmış şekilde yazarsanız(12.5 yerine 12,5 gibi) işler kolaylaşır.( windows bölgesel ayarlarından Türkiye'yi seçerseniz, ondalık ayracı "," olur ama A.B.D seçilirse ondalık ayracı "." olur, Türkçe windows dolayısıyla Türkiye bölgesel seçeneklerini kullandığınızı düşünerek söylüyorum, derleyici ondalık sembolünü kullanıcının işletim sistemi ayarlarına göre belirliyor)
            float toplam = 0;
            for (int i = 0; i < listBox1.Items.Count; i++)
                toplam += float.Parse(listBox1.Items[i].ToString());
            MessageBox.Show((toplam / listBox1.Items.Count).ToString());


yok ille de nokta olacak derseniz farklı bir yöntem olarak döngü içindeki kısmı şu şekilde değiştirirsiniz
toplam += float.Parse(listBox1.Items[i].ToString().Split('.')[0] + "," + listBox1.Items[i].ToString().Split('.')[1]);
ama listbox içinde tam sayı değerleride noktalı şekilde yazmanız gerekir (6 için 6.0 gibi)

Parse(), Split(), ToString() metodlarının ne işe yaradıklarını araştırmanızı öneririm...
KİMSEYİ ENGELLEDİĞİM YOK, ÖZEL İLETİ DEVRE DIŞI !