我正在尝试计算浮点前的数字位数。例如
输入:123.4
预期产量:3 我的实际输出:5
我确定digit.equals(“。”)有问题,因为程序没有突破循环。
这是我的代码:
public class Program
{
public static void Main()
{
Console.WriteLine(HowManyDigit(123.4));
}
public static Int32 HowManyDigit(Double number)
{
string x = number.ToString();
var counter = 0;
for (int i = 0; i < x.Length; i++)
{
var digit = x[i];
//Console.WriteLine(counter);
if (digit.Equals("."))
{
break;
}
else
{
counter++;
}
}
return counter;
}
}
答案 0 :(得分:3)
你的代码不起作用的原因分解为这个逻辑:
var digit = x[i];
if (digit.Equals("."))
{
break;
}
char digit
永远不会等于字符串 "."
如果您将代码更改为:
//Note that I use a char, indicated by ''
if (x[i].Equals('.'))
{
break;
}
或者简单地说:
if (x[i] == '.')
{
break;
}
这两种方法中的任何一种都会给你一个与当前代码截然不同的结果。
话虽这么说,这种方法并不是做你想做的最好的方法。您只需使用IndexOf()
即可获得所需的确切数字:
public static int HowManyDigit(double number)
{
return number.ToString().IndexOf('.');
}
小提琴here
答案 1 :(得分:2)
只需计算基数10的对数,然后转换为带底数的整数。
n = Math.Floor(Math.Log10(x))+1;
答案 2 :(得分:2)
这是一个LINQ解决方案:
double number = 123.4;
var result = number.ToString().TakeWhile(x => char.IsDigit(x)).Count();
答案 3 :(得分:1)
试试这个x.IndexOf('.')
这将是您的答案
答案 4 :(得分:1)
替换它:
if (digit.Equals("."))
有了这个:
if (digit.Equals('.'))
现在你的输出应该是3。