2012-02-04 10 views
6

Tuve que lidiar con el código que hace el cálculo con un gran número, p.literales enteros largos

long foo = 6235449243234; 

Esto es difícil de decir cuál es el orden de magnitud. Me gustaría escribirlo

long foo = 6_235_449_243_234; 

O

long foo = @6 235 449 243 234; 

Pero C# no tiene estas características. ¿Cómo hacer que los literales numéricos sean más legibles?

comentario que

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

convertirlo de cadena

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

Cualquier otra opción?

+2

posible duplicado de (http://stackoverflow.com/questions/8488989/can -i-declare-constant-integers-with-a-miles-separator-in-c) – CodesInChaos

+0

En el ejemplo 'LiteralConverter.toLong',' '' no es necesario. – luiscubal

+0

El lenguaje debería soportar el uso de '_' en literales numéricos. No veo ninguna razón por la que el analizador no pueda soportar eso. –

Respuesta

3

Comentarios cada vez IMO. De lo contrario, sólo estás haciendo que el código hinchado y menos que óptima:

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

Comentarios - y - si es posible utilizando const o static readonly valores para que sólo está declarando/comentando el número en un solo lugar.

5

Defina las constantes con nombre para estos literales, y use los comentarios para explicar lo que representa el número.

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

+1, pero el precio del desayuno probablemente se ha duplicado por ahora. – Marlon

3

Se podría escribir

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

Pero eso no se pueda leer bien.

Para los números en las variables cuando está depurando, puede escribir un debugger visualizer.

+0

+1 visualizador de depurador, no lo sabía –

1

Otra forma (no recomendada) de hacerlo: [? ¿Puedo declarar enteros constantes con un separador de miles en 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

muy inteligente (fuera de la caja) –