2012-02-04 11 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-integer-with-a-thousand-separator-in-c) – CodesInChaos

+0

'LiteralConverter.toLong'の例では、' @ 'は必要ありません。 – luiscubal

+0

言語は数値リテラルで '_'の使用をサポートするだけです。パーサーがそれをサポートできない理由は何もありません。 –

答えて

3

毎回コメントはIMOです。そうしないと、あなただけのコードが肥大化し、最適未満作っている:

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

それをやって別の(非推奨)方法:[?私は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

非常に賢い(ボックスの外) –

関連する問題