2012-02-04 57 views
6

我不得不处理用大号码进行计算的代码,例如,long integer literals

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 2012-02-04 19:04:52

+0

在'LiteralConverter.toLong'示例中,'@'不是必需的。 – luiscubal 2012-02-04 19:05:48

+0

该语言应该支持在数字文字中使用'_'。我没有看到解析器无法支持的原因。 – 2015-10-23 09:24:14

回答

3

每次IMO评论。否则,你只是使代码不是最佳臃肿,少:

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

评论 - 如果可能的话 - 采用conststatic 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 2012-02-04 19:24:39

3

你可以写

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

但是,这是不是真的读无论是。

对于调试时变量中的数字,您可以编写一个debugger visualizer

+0

+1调试器可视化器,不知道它 – 2012-02-04 19:11:49

1

这样做的另一个(不推荐)的方式:[?我可以声明,在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

很聪明(盒子外面) – 2014-01-30 05:38:23