2012-02-04 5 views
6

J'ai dû faire face au code qui fait le calcul avec un grand nombre, par ex.littéraux entiers longs

long foo = 6235449243234; 

Il est difficile de dire quel est l'ordre de grandeur. Je voudrais écrire

long foo = 6_235_449_243_234; 

Ou

long foo = @6 235 449 243 234; 

Mais C# ne possède pas ces caractéristiques. Comment rendre les littéraux numériques plus lisibles?

Commentaire il

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

convertir de chaîne

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

Toutes les autres options?

+2

double possible (http://stackoverflow.com/questions/8488989/can -i-declare-constantes-entiers-avec-un-milliers-séparateur-en-c) – CodesInChaos

+0

Dans l'exemple 'LiteralConverter.toLong', le' @ 'n'est pas nécessaire. – luiscubal

+0

La langue devrait juste soutenir l'utilisation de '_' dans les littéraux numériques. Je ne vois aucune raison pour laquelle l'analyseur ne pourrait pas supporter cela. –

Répondre

3

Commentaires à chaque fois IMO. Sinon, vous êtes juste rendre le code pléthorique et moins optimale:

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

Commentaires - et si possible - en utilisant const ou static readonly valeurs de sorte que vous ne déclarez/commenter le numéro dans un seul endroit.

5

Définissez des constantes nommées pour ces littéraux et utilisez des commentaires pour expliquer ce que le nombre représente.

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

+1, mais le prix du petit-déjeuner a probablement doublé à ce jour. – Marlon

3

Vous pouvez écrire

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

Mais ce n'est pas soit vraiment lisible.

Pour les nombres dans les variables lorsque vous déboguez, vous pouvez écrire un debugger visualizer.

+0

+1 visualiseur de débogueur, ne le savais pas –

1

Une autre (unrecommended) façon de le faire: [? Puis-je déclarer des nombres entiers constants avec un séparateur de milliers 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

très intelligent (en dehors de la boîte) –

Questions connexes