总结双ReadLine值?

时间:2012-02-14 09:28:13

标签: c#

我是C#编程的新手,我不确定我做错了什么,因为我无法总结Double的数字。如果我输入2,5和2,5我得到5,但是如果我输入2.5和2.5,当我在数字之间使用点而不是逗号时我得到零。为什么这样?

我添加了一些代码:

 private void ReadInputAndSumNumbers()
    {
        while (!done)
        {
            Console.Write("Number: ");
            if (double.TryParse(Console.ReadLine(), out num))
            {
                if (num == 0)
                {
                    done = true;
                }
                else
                {
                    sum += num;
                }
            }
        }
    }

我的设置是使用逗号,但我希望用户能够输入带点的值

2 个答案:

答案 0 :(得分:4)

您如何将ReadLine输入转换为双打?大多数转换操作都是特定于语言环境的,因此如果您的Windows设置具有,作为小数分隔符,则会遵循此设置。

示例:

string enteredByUser = Console.ReadLine();

// uses user-specific Windows settings (decimal separator might be ",")
double myDouble1 = double.Parse(enteredByUser);

// uses default settings (decimal separator is always ".")
double myDouble2 = double.Parse(enteredByUser, CultureInfo.InvariantCulture);

简短注释:如果您解析用户输入,则应该查看double.TryParse,因为这比double.ParseConvert.ToDouble更强大,因为它允许您在不诉诸异常处理的情况下检测错误输入。


编辑:如果您想支持两个逗号和点,您需要先将点转换为逗号(反之亦然)。 String.Replace可以在这里帮助你。但请注意,如果用户尝试输入千位分隔符(1.000,00 - > 1.000.001,000,00 - >错误),此方法将会中断。建议的方法是

  • 只接受Windows中指定的小数分隔符,如果输入来自最终用户(即保持代码原样)和
  • 只接受中性文化(.),如果输入来自某些机器生成的输出或文件。

答案 1 :(得分:0)

用于计算双和的样本

static void Main(string[] args)
{
    var retVal = 0.0;
    var sum = 0.0;
    while (true) 
    {
        Console.WriteLine("Enter input:");  
        string line = Console.ReadLine();  
        if (line == "exit")  
        {
            break;
        }


        double.TryParse(line, NumberStyles.Any, CultureInfo.InvariantCulture, out retVal);
        sum += retVal;

        Console.WriteLine(string.Format("Double Value : {0}", sum ));  
    }

    Console.ReadKey();
}