2016-04-03 46 views
1

Sadece C# öğreniyorum ve bu kodun neyin yanlış olduğunu anlayamıyorum. yazmak için hiçbir standart dönüşümler olduğundan'int' türünde bir değer kullanılamaz.

Hata CS1750 türü 'int' değeri varsayılan parametre olarak kullanılamaz 'MidpointRounding'

Kodu:

public static double MyRound(double value, int point, MidpointRounding midpointRounding = 1) 
{ 
    if (!Enum.IsDefined(typeof (MidpointRounding), midpointRounding)) 
     throw new ArgumentOutOfRangeException(nameof(midpointRounding)); 

    decimal num = (decimal)((double)value); 

    try 
    { 
     num = Math.Round(num, point, midpointRounding); 
    } 
    catch (Exception exception1) 
    { 
     Exception exception = exception1; 
     MessageBox.Show(exception.Message, "Error : MyRound", MessageBoxButton.OK, MessageBoxImage.Hand); 
    } 

    return (double)((double)num); 
} 
+1

Hangi hatta alıyorsunuz? –

+3

Hatalı ifadenin/satırın ne olduğunu size bildiren açık bir hata mesajınız var. Bunun ne olmasını bekliyorsunuz? – kai

+2

@VisualVincent hata bildirimi, işlev bildiriminin (varsayılan parametrelerden bahsedildiği için) olduğunu söyler – kai

cevap

7

son parametre, bir numara olan MidpointRounding tipindedir. Bir enum öğesine dolaylı olarak atayabileceğiniz tek int literal, 0'dur. Sağlayıcınız, derleyicinin şikayet ettiği şey olan varsayılan değer olan 1.

MidpointRounding.ToEven kullanın, bunun anlamı buysa.

Diğer bazı gözlemler: midpointRounding aralığında ise

  • Gerek Math.Round will take care of that, kontrol etmek.
  • Mesaj kutularını istisnalardan gösterme, bu iyi bir yaklaşım değildir, kullanıcı arayüzü kodunu mantık koduyla karıştırır. Varsa istisnanın yayılmasına izin vermelisiniz.
  • Sen return (double)((double)num); yazdım, bir döküm yeterli olacağını;)
  • (double)value döküm gerek yok, value zaten Nihayet bir double
  • olduğu gibi ... Casting bir doubledecimal, ardından verilen bir yöntemle bunu yuvarlama, daha sonra double'a geri döndürmek numaralı telefona no'lu bir fikirdir. Kesinliği kaybedersiniz ve orta nokta yuvarlama metodu büyük olasılıkla yenilir. Orta nokta yuvarlama yöntemi önemliyse, decimal kullanın.
İlgili konular