我如何计算一个数字中的总位数?
我怎样才能得到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;