我如何计算一个数字中的总位数?

我怎样才能得到C#中的一个数字的总位数? 例如,数字887979789有9位数字。

不用转换成string,你可以尝试:

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

ysap的评论更正:

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

尝试这个:

 myint.ToString().Length 

那样有用吗 ?

不是直接C#,但公式是: n = floor(log10(x)+1)

已经在这里的答案工作无符号整数,但我还没有find很好的解决scheme,从小数和双打数字的位数。

 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 

如果精度很重要,你可以把inputtypes从double精度转换为decimal精度,但是十进制也是有限制的

使用recursion(有时在访谈中被问到)

 public int CountDigits(int number) { // In case of negative numbers number = Math.Abs(number); if (number >= 10) return CountDigits(number / 10) + 1; return 1; } 

Steve的答案是正确的 ,但对于小于1的整数不起作用。

这里有一个更新的版本,可以用于消极的工作:

 int digits = n == 0 ? 1 : Math.Floor(Math.Log10(Math.Abs(n)) + 1) 
 static void Main(string[] args) { long blah = 20948230498204; Console.WriteLine(blah.ToString().Length); } 

将数字除以10将给你最左边的数字,然后做一个模数10的数字给没有第一个数字的数字,并重复,直到你有所有的数字

 int i = 855865264; int NumLen = i.ToString().Length; 

这取决于你想要用数字来做什么。 你可以从最后一个数字开始迭代到第一个数字:

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

如果仅用于validation您可以: 887979789 > 99999999

假设你的问题是指一个int,下面的工作为负/正和零:

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

转换成string,然后你可以通过.length方法计算重数的数字。 喜欢:

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