2012-02-04 2 views
6

Мне приходилось иметь дело с кодом, который выполняет вычисления с большим числом, например.длинные целые литералы

long foo = 6235449243234; 

Это трудно сказать, что на порядок. Я хотел бы написать это

long foo = 6_235_449_243_234; 

Или

long foo = @6 235 449 243 234; 

Но C# не имеет таких возможностей. Как сделать числовые литералы более читабельными?

Комментировать это

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

Преобразование его из строки

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

Любые другие варианты?

+2

возможно дубликат (http://stackoverflow.com/questions/8488989/can -i-declare-constant-integers-with-a-thousand-separator-in-c) – CodesInChaos

+0

В примере 'LiteralConverter.toLong'' @ 'не требуется. – luiscubal

+0

Язык должен просто поддерживать использование «_» в числовых литералах. Я не вижу причин, по которым парсер не мог этого поддержать. –

ответ

3

Комментарии каждый раз, когда ИМО. В противном случае, вы просто сделать код раздутой и менее оптимален:

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

Комментарии - и если возможно - с помощью const или static readonly значения, так что вы только декларирование/комментируя количество в одном месте.

5

Определите именованные константы для этих литералов и используйте комментарии, чтобы объяснить, что представляет собой число.

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

+1, но цена завтрака, вероятно, удвоилась. – Marlon

3

Вы могли бы написать

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

Но это на самом деле не считываемый.

Для чисел в переменных, когда вы отлаживаете, вы можете написать debugger visualizer.

+0

+1 отладчик визуализатор, не знал его –

1

Другой (unrecommended) способ сделать это: [? Могу ли я объявить постоянные целые числа с разделителем тысяч в 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

очень умный (за пределами коробки) –

Смежные вопросы