144 votes

Comment puis-je obtenir un compte du nombre total de chiffres dans un nombre ?

Comment puis-je obtenir un compte du nombre total de chiffres d'un nombre en C# ? Par exemple, le nombre 887979789 a 9 chiffres.

7 votes

Essayez d'utiliser .Length si cela ne fonctionne pas convertissez-le en chaîne de caractères d'abord

0 votes

Disons que x = 887979789 ; x.ToString().Count() ; vous donnera cela.

213voto

Steve Points 9867

Sans convertir en chaîne, vous pouvez essayer

Math.Floor(Math.Log10(n) + 1);

15 votes

J'ai bien peur que ceil(log10(10)) = ceil(1) = 1, et non 2 comme cela devrait être pour cette question !

4 votes

Merci, c'est une bonne méthode. Mais elle n'est pas plus rapide que int count = 0 ; do { count++ ; } while ((i /= 10) >= 1) ; :(

3 votes

Si votre plage de nombres comprend des négatifs, vous devrez utiliser Math.Floor(Math.Log10(Math.Abs(n)) + 1) ;

94voto

Andiih Points 7331

Essayez ça :

myint.ToString().Length

Est-ce que ça marche ?

29 votes

Il convient de souligner que cette méthode risque de poser des problèmes si vous traitez des nombres négatifs. (Et évidemment des décimales, mais l'exemple utilise une valeur de int donc je suppose que ce n'est pas un problème).

2 votes

L'allocation de chaînes de caractères @Krythic est la nouvelle mode dans le monde .NET.

1 votes

Nouveau ? Pas vraiment. J'ai alloué des cordes de manière flagrante en 2010. Quel créateur de tendance. Lol. Tu as raison cependant. C'est sale !

13voto

ysap Points 2255

Pas directement en C#, mais la formule l'est : n = floor(log10(x)+1)

3 votes

Log10(0) est -infini

2 votes

@Klaus - log10(0) est en fait indéfini. Mais vous avez raison de dire que c'est un cas particulier qui doit être testé et traité séparément. C'est également vrai pour tout nombre entier non positif. Voir les commentaires à la réponse de Steve.

0 votes

@ysap : Log10 est assez difficile à faire fonctionner correctement. Avez-vous une idée sur la façon de l'implémenter correctement pour toute la gamme des valeurs d'entrée possibles ?

9voto

nawfal Points 13500

Les réponses déjà données ici fonctionnent pour les entiers non signés, mais je n'ai pas trouvé de bonnes solutions pour obtenir le nombre de chiffres des décimaux et des doubles.

public static int Length(double number)
{
    number = Math.Abs(number);
    int length = 1;
    while ((number /= 10) >= 1)
        length++;
    return length;
}
//number of digits in 0 = 1,
//number of digits in 22.1 = 2,
//number of digits in -23 = 2

Vous pouvez changer le type d'entrée de double a decimal si la précision compte, mais la décimale a aussi une limite.

4voto

weloytty Points 621
static void Main(string[] args)
{
    long blah = 20948230498204;
    Console.WriteLine(blah.ToString().Length);
}

3 votes

Méfiez-vous des aspects négatifs : -1 = 2

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X