从控制台读取双倍

时间:2014-11-23 19:57:29

标签: c# string console double

如何从控制台读取示例0.3的double值?当我在0.3之前输入类似于.X之类的内容时会抛出异常。

到目前为止,我已尝试过类似的内容:

Console.WriteLine("Type x: ");
double x = Convert.ToDouble(Console.ReadLine());

3 个答案:

答案 0 :(得分:4)

Convert.ToDouble(string)方法会将Double.ParseCurrentCulture设置一起使用。这是怎样的implemented;

public static double ToDouble(String value)
{
     if (value == null)
         return 0;
     return Double.Parse(value, CultureInfo.CurrentCulture);
}

这个Double.Parse实现为;

public static double Parse(String s, IFormatProvider provider)
{
    return Parse(s, NumberStyles.Float| NumberStyles.AllowThousands, NumberFormatInfo.GetInstance(provider));
}

如您所见,如果NumberStyles.Float| NumberStyles.AllowThousands与您的CurrentCulture设置匹配,此解析操作将仅 。

我强烈怀疑您的CurrentCulture NumberFormatInfo.NumberDecimalSeparator property不是点(.)这就是您的代码抛出FormatException的原因。

你可以选择2个;使用NumberDecimalSeparator .作为InvariantCulture CurrentCulture.Clone NumberDecimalSeparator .并将Console.WriteLine("Type x: "); double x = DateTime.Parse(Console.ReadLine(), CultureInfo.InvariantCulture); var culture = (CultureInfo)CultureInfo.CurrentCulture.Clone(); culture.NumberFormat.NumberDecimalSeparator = "."; Console.WriteLine("Type x: "); double x = DateTime.Parse(Console.ReadLine(), culture); 设为{{1}}的文化1}}。

{{1}}

{{1}}

答案 1 :(得分:1)

请改为尝试:

double x = double.Parse(Console.ReadLine(), NumberStyles.Any, CultureInfo.InvariantCulture);

答案 2 :(得分:0)

我会使用TryParse:

Console.Write("Type x: ");
var input = Console.ReadLine();
double value;

while (!double.TryParse(input, NumberStyles.Any,
    CultureInfo.InvariantCulture, out value))
{
    Console.Write("{0} is not a double. Please try again: ");
    input = Console.ReadLine();
}

Console.WriteLine("Thank you! {0} is a double", value);