2012-02-04 24 views
6

Büyük sayı ile hesaplamayı yapan kodla uğraştım.uzun tamsayı okuyucular

long foo = 6235449243234; 

Bu, büyüklük sırasının ne olduğunu söylemek zor. Ben

long foo = 6_235_449_243_234; 

Ya

long foo = @6 235 449 243 234; 

Fakat C# bu özelliklere sahip değildir yazmak istiyorum. Sayı değişmezleri nasıl daha okunabilir hale getirilir?

Yorum onu ​​

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

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

Başka seçenekler dize

onu dönüştürme?

+2

olası yinelenen (http://stackoverflow.com/questions/8488989/can -i-declare-sabit-tamsayı-ile-binlerce-ayırıcı-in-c) – CodesInChaos

+0

'LiteralConverter.toLong' örneğinde,' @ 'gerekli değildir. – luiscubal

+0

Bu dilde, sayısal değişmezlerde yalnızca '_' kullanımını desteklemelidir. Çözümleyicinin bunu destekleyememesinin hiçbir nedenini görmüyorum. –

cevap

3

Yorumlar her zaman IMO. Yoksa, sadece en uygun daha kod şişirilmiş ve daha az yapıyoruz:

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

Yorumlar - ve mümkünse - sadece/beyan tek bir yerde numarayı yorumlama böylece const veya static readonly değerleri kullanarak.

5

Bu hazır bilgi için adlandırılmış sabitleri tanımlayın ve sayının neyi temsil ettiğini açıklamak için yorumları kullanın.

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

+1, ancak kahvaltı fiyatı muhtemelen iki katına çıktı. – Marlon

3

Sen

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

yazabilirsiniz Ama bu da gerçekten okunabilir değil.

Hata ayıklaması yaparken değişkenlerdeki sayılar için bir debugger visualizer yazabilirsiniz.

+0

+1 debugger visualizer, bilmiyordu –

1

bunu yapmanın başka (unrecommended) yolu: [? Ben C# binlerce ayırıcı ile sabit tamsayılar bildirmek Can]

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

çok akıllı (kutunun dışında) –

İlgili konular