如何從控制檯讀取例如0.3的雙精度值?當我使用0.3之前提到的.X類型的東西時,它會拋出異常。從控制檯讀取雙精度值
到目前爲止,我已經試過類似的東西:
Console.WriteLine("Type x: ");
double x = Convert.ToDouble(Console.ReadLine());
如何從控制檯讀取例如0.3的雙精度值?當我使用0.3之前提到的.X類型的東西時,它會拋出異常。從控制檯讀取雙精度值
到目前爲止,我已經試過類似的東西:
Console.WriteLine("Type x: ");
double x = Convert.ToDouble(Console.ReadLine());
Convert.ToDouble
(string)方法使用Double.Parse
你CurrentCulture
設置。這裏是怎樣的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
或.Clone
您的CurrentCulture
,並將其設置爲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);
感謝您的詳細聲明。是的,我的CUrrenctCulture的分隔符是',':) – Sheil 2014-11-23 20:13:53
試試這個:
double x = double.Parse(Console.ReadLine(), NumberStyles.Any, CultureInfo.InvariantCulture);
我會用的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);
你是什麼意思_doesn't WORK_?你得到任何異常或錯誤信息?什麼是你的「CurrentCulture」? – 2014-11-23 19:58:32
系統格式異常。 – Sheil 2014-11-23 19:59:06
使用'Double.Parse'或'Double.TryParse'而不是'Convert.ToDouble',它給了你更多的控制。 – 2014-11-23 19:59:16