2008-10-01 17 views
9

C# novice burada, int 'max' aşağıdaki 0 ​​olduğunda Sıfır hatasıyla bir bölme elde ediyorum, bunun neden olduğunu anlayabiliyorum, ancak maksimum 0 olduğunda bunu nasıl ele almalıyım? pozisyon da bir int. sıfır içinSıfır hatayla bölün, bunu nasıl düzeltirim?

private void SetProgressBar(string text, int position, int max) 
    { 
     try 
     { 
      int percent = (100 * position)/max; //when max is 0 bug hits 
      string txt = text + String.Format(". {0}%", percent); 
      SetStatus(txt); 
     } 
     catch 
     { 
     } 
    } 
+0

http: // stackoverflow adresinde mevcut olan gibi güvenli bir bölümleme yöntemi kullanabilirsiniz.com/a/13260217/378115 –

cevap

16
int percent = 0 
if (max != 0) percent = (100*position)/max 
3

kontrol edin.

if (max == 0) { 
    txt = "0%"; 
} else { 
    // Do the other stuff.... 
9

Bu, tamamen istediğiniz davranışa bağlıdır. Program çubuğunuzun maksimum değeri sıfır ise, dolu mu? Boş mu? Bu bir tasarım seçeneğidir ve seçtiğinizde, sadece max == 0 için test edin ve cevabınızı dağıtın.

8
  • Bir istisna atabilirsiniz.
  • int percent = (max > 0) ? (100 * position)/max : 0;
  • Yapabilecekleriniz Yüzdelik bir değer atamak yerine hiçbir şey yapamazsınız.
  • pek çok başka şeyler ...

istediğini bağlıdır.

2

Bu bir C# sorunu değil, bir matematik problemidir. Sıfıra göre bölüm tanımlanmamıştır. Eğer max> 0 olup olmadığını kontrol eden bir if deyiniz var ve sadece bölümünüzü çalıştırınız.

0

Eh, maksimum sıfır ise, o zaman yapılacak bir ilerleme yoktur. Bunun çağrıldığı istisnayı yakalamayı deneyin. Muhtemelen bir sorun olup olmadığı veya ilerleme çubuğunun sıfır veya% 100 olarak ayarlanması gerektiğine karar verilebilecek yer burasıdır.

+0

Burada katılmam gerek. Özel durumun atılmasına izin verilmesi bir performans isabeti ile gelir - hesaplama büyük bir döngü halinde gerçekleşiyorsa ne olur? Sorunu tahmin edebilirsek, istisna atılmadan ÖNCE, buna tepki göstermeli ve istisna işlemlerini bilinmeyen senaryolara bırakmalıyız. –

+0

@PatrickMcCurley Bu, genel aritmetik istisna işleme hakkında bir yorum değildir - bu, sorulan asıl soruya verilen bir yanıttır. – Marcin

0

Sanırım temel soru şudur: Bu işleve en çok '0' olduğunda bu işlevi çağırmak mantıklı mıdır? evet, o zaman buna özel işlem eklemek istiyorsanız 0 mantıklı değilse yani .:

if (max == 0) 
{ 
    //do special handling here 
} 
else 
{ 
    //do normal code here 
} 

, bunu nereden geldiğini araştırmak istiyorum.

0

sahibi olması için örnek olarak gösterdi Ayrıca, Sıfır istisna Divide kaldırabileceğinden 0.

private void SetProgressBar(string text, int position, int max) 
{ 
    if(max == 0) 
     return; 
    int percent = (100 * position)/max; //when max is 0 bug hits 
    string txt = text + String.Format(". {0}%", percent); 
    SetStatus(txt); 
} 

max == denetler bir bekçi maddesini gerekir, ancak o zaman istisnalar işlemek için genellikle daha maliyetlidir bilinen kötü değerler için kontroller kurmak.

0

Eğer bir indirme için kullanıyorsanız, henüz dosya boyutunu bilmiyorsanız bu durumda max == 0 olduğunu varsayarak% 0 göstermek isteyebilirsiniz. Bazı diğer uzun görev için bu kullanıyorsanız pozisyon 0 ile -1 arasında olamaz çünkü muhtemelen isteyeceksiniz böylece

int percent = 0; 
if (max != 0) 
    ...; 

, I, 100% de

Ama varsaymak isterdim 100 *

1

dönüştürme düşmesi senin

int percent = (100 * position)/max; 

int percent; 
if (max != 0) 
    percent = (100 * position)/max; 
else 
    percent = 100; // or whatever fits your needs 
içine
İlgili konular