2012-02-04 10 views
6

Miałem do czynienia z kodem, który wykonuje obliczenia z dużą liczbą np.długich literałów całkowitych

long foo = 6235449243234; 

Trudno powiedzieć, jaki jest rząd wielkości. Chciałbym napisać, że

long foo = 6_235_449_243_234; 

Albo

long foo = @6 235 449 243 234; 

Ale C# nie ma tych cech. Jak uczynić literały liczb bardziej czytelnymi?

Komentarze

long foo = 6235449243234; // 6 23... 

przekonwertować go z łańcucha

long foo = LiteralConverter.toLong(@"6_235_449_243_234"); 
int mask = LiteralConverter.toInt("b0111_0000_0100_0000"); 

Wszelkie inne opcje?

+2

możliwe duplikat (http://stackoverflow.com/questions/8488989/can -i-declare-constant-integers-with-a-thousand-separator-in-c) – CodesInChaos

+0

W przykładzie 'LiteralConverter.toLong'' @ 'nie jest konieczne. – luiscubal

+0

Język powinien po prostu wspierać użycie "_" w literałach numerycznych. Nie widzę żadnego powodu, dla którego parser nie mógłby tego poprzeć. –

Odpowiedz

3

Komentarze za każdym razem IMO. W przeciwnym razie jesteś tylko czyni kod nadęty i mniej niż optymalna:

long foo = 6235449243234; // 6,235,449,243,234 
1

Komentarze - i jeśli to możliwe - z wykorzystaniem const lub static readonly wartości tak, że są tylko deklarując/komentując numer w jednym miejscu.

5

Definicja nazwanych stałych dla tych literałów i użycie komentarzy do wyjaśnienia, co oznacza liczba.

class MyClass { 
    /// 
    /// This constant represents cost of a breakfast in Zimbabwe: 
    /// 6,235,449,243,234 
    /// 
    const long AvgBreakfastPriceZimbabweanDollars = 6235449243234; 
} 
+4

+1, ale cena śniadania prawdopodobnie już podwoiła się. – Marlon

3

można napisać

long lNumber = (long)(6e12 + 235e9 + 449e6 + 243e3 + 234); 

Ale to naprawdę nie jest czytelny albo.

Dla liczb w zmiennych podczas debugowania można napisać debugger visualizer.

+0

Wizualizer debuggera +1, nie wiedziałem o tym –

1

Innym (Unrecommended) sposób to zrobić: [? Mogę zadeklarować stałe całkowite z separator tysięcy w C#]

static long Parse(params int[] parts) 
{ 
    long num = 0; 
    foreach (int part in parts) 
     num = num * 1000 + part; 
    return num; 
} 

long foo = Parse(6,235,449,243,234); 
+0

bardzo sprytny (poza polem) –

Powiązane problemy