c#在浮点之前计算数字

时间:2018-04-05 16:19:06

标签: c# for-loop

我正在尝试计算浮点前的数字位数。例如

输入: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;
        }
}

5 个答案:

答案 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。