2010-12-19 3 views
64

Как я могу получить количество общего числа цифр в C#? Например, номер 887979789 имеет 9 цифр.Как я могу получить количество общего числа цифр в номере?

+5

попробуйте использовать .Length, если он не работает, преобразовать его в строка сначала – Breezer

+0

Пусть говорят x = 887979789; . X.ToString() Count(); даст вам это. –

ответ

113

без преобразования в строку, вы можете попробовать: комментарий

Math.Ceiling(Math.Log10(n)); 

коррекции следующего ysap в:

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

Я боюсь ceil (log10 (10)) = ceil (1) = 1, а не 2, как и должно быть для этого вопрос! – ysap

+0

Вы правы. Я должен округлять, а не вниз. Благодарю. – Steve

+2

Спасибо, это хороший метод. Хотя это не быстрее, чем int count = 0; do {количество ++; } while ((i/= 10)> = 1); :( –

60

Попробуйте:

myint.ToString().Length 

ли это работает?

+0

Не понял, что это была домашняя работа ... ну ладно! Надеюсь, вы увидите *, почему это работает! – Andiih

+0

Эта работа, спасибо – Arash

+16

Стоит отметить, что вы столкнетесь с проблемами с этим методом, если имеете дело с отрицательными числами.(И, очевидно, десятичные числа, но пример использует 'int', поэтому я предполагаю, что это не проблема.) –

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

деление на 10 даст вам самую левую цифру, то делать моды 10 на числе дает номер без первой цифры и повторить, что до вас есть все цифры

0
int i = 855865264; 
int NumLen = i.ToString().Length; 
+1

не работает для отрицательного int, а для чисел вроде 23.00. Сделайте 'string.TrimStart ('-')' лучше – nawfal

+1

Вниз для явного выделения строки – Krythic

-2

Это зависит от того, что именно вы хотите делать с дигитами. Вы можете перемещаться по номеру цифры, начиная от последнего к первому таким образом:

int tmp=number; 
int lastDigith = 0; 
do 
{ 
    lastDigith = tmp/10; 
    doSomethingWithDigith(lastDigith); 
    tmp %= 10; 
}while(tmp!=0); 
13

Не непосредственно C#, но формула: n = floor(log10(x)+1)

+1

log10 (0) is -infinity –

+1

@Klaus - log10 (0) на самом деле не определено. Но вы правы в том, что это особый случай, который нужно тестировать и обрабатывать отдельно. Это справедливо и для любого не положительного целого числа. См. Комментарии к ответу Стива. – ysap

7

Ответы уже здесь работают для целых чисел без знака, но я не нашел хороших решений для получения числа цифр от десятичных знаков и удвоений.

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 

Вы можете изменить тип входного сигнала от double до decimal Если указана точность вопросы, но десятичное имеет предел тоже.

-2

Если его только для проверки вы можете сделать: 887979789 > 99999999

6

Использование рекурсии (иногда спрашивают на интервью)

public int CountDigits(int number) 
{ 
    // In case of negative numbers 
    number = Math.Abs(number); 

    if (number >= 10) 
     return CountDigits(number/10) + 1; 
    return 1; 
} 
5

Ответ Steve is correct, но он не работает для целых чисел меньше, чем 1.

Вот обновленная версия, которая делает работу для негативов:

int digits = n == 0 ? 1 : Math.Floor(Math.Log10(Math.Abs(n)) + 1) 
-3

преобразовать в строку, а затем вы можете подсчитать число без цифр по методу .length. как:

String numberString = "855865264".toString(); 
int NumLen = numberString .Length; 
+0

Выделение строки совершенно не нужно. – Krythic

-3

Предположим, что ваш вопрос был ссылкой на междунар, следующие работы для отрицательной/положительной и нулевой, а также:

Math.Floor((decimal) Math.Abs(n)).ToString().Length 
+1

Сокращенное значение для вопиющего выделения строки. – Krythic

Смежные вопросы