2010-09-30 39 views
5

204/5'in 200/5'ten büyük olup olmadığını nasıl kontrol edebilirim? Hem kayan nokta hem de ondalık matematik kullanarak bunu denediğimde zorluk yaşadım. EklemeC# bölümü ile ilgili sorunlar #

+0

(float) 200/(float) 5 <(float) 204/(float) 5 – FFox

cevap

5

bir .0 veya herhangi bir numaraya bir f bir kayan nokta ondalık olarak bu sayıyı yorumlamak dili zorlar:

  • 204f

    tek duyarlıklı olduğunu

    • 204 bir tam sayıdır kayan noktalı ondalık sayı ve

    • , çift kesinlikli kayan noktalı bir ondalıktır.

    Bu nedenle, 204/5 bir tamsayıyı 40 ve 204.0/5 döner bir çift hassas float 40.8 döndürür.

    if (204.0/5 > 200.0/5) { 
        // stuff 
    } 
    

    Veya, matematiksel-basit rotayı sürebilir: şamandıra veya ondalık olacak işi kullanma

    if (204 > 200) { 
        // because you're dividing both of them by 5 
    } 
    
  • +0

    işlemci yeniden düzenleme yoktur. Sadece derleyiciye sayılarla (tamsayılar, yüzer, çiftler, vb.) Başa çıkmak için ne tür bir kod gerektiğini söyler. – siride

    +0

    @siride - Kesinlikle doğru. Düzenlenen. – amphetamachine

    0
    if ((204.0/5.0) > (200.0/5.0)) { 
        //do stuff! 
    } 
    
    15

    ... ama kayan aritmetik gerçekleştirmek için gereken ondalık/yüzdürme/çiftleme işleminden en az birini yaparak nokta:

    decimal x = ((decimal) 204)/5; 
    decimal y = ((decimal) 200)/5; 
    
    if (x > y) // Yes! 
    

    Veya kullanım kayan nokta değişmezleri: sadece de

    decimal x = 204/5m; 
    decimal y = 200/5m; 
    

    şamandıra/çift işi:

    double x = 204d/5; 
    double y = 200d/5; 
    

    decimal x = 204m/5; 
    decimal y = 200m/5; 
    

    farketmez işlenen noktası yüzüyor

    Peki, 204/5'i kullanırsanız neler oluyor? Eh, bu ifadeyi ele alalım:

    double x = 204/5; 
    

    derleyici sağ tarafta türünü çalışmak için değişkenin türünü kullanmaz. Sağ tarafın iki tam sayıyı bölerek elde edilen bir tam sayı olduğu ortaya çıkar. sonucu daha sonra double'a dönüştürülür ve x'a atanır. Sorun, aritmetik tamsayıları ile sadece yapılırken, kayan noktaların daha önce gerçekleştirilmesini istiyorsanız, böylece bir kayan nokta sonucu elde edebilirsiniz.

    0

    Nedeni, 204/5 hesaplamayı denediğinizde, tam olarak int 204 divides int 5 hesaplanıyor, sonuç aynı zamanda C# içinde int. 204m/5 deneyebilirsiniz, doğru cevabı alacaksınız.

    0
    if (((float)(204)/5) > ((float)(200)/5)) 
    { 
    //Enter code here 
    } 
    else 
    { 
    //Enter code here 
    }