[英]Reading double from console
如何從控制台讀取double值,例如0.3? 當我使用0.3之前提到的.X鍵入內容時,它將引發Exception。
到目前為止,我已經嘗試過類似的方法:
Console.WriteLine("Type x: ");
double x = Convert.ToDouble(Console.ReadLine());
Convert.ToDouble
(字符串)方法將Double.Parse
與CurrentCulture
設置一起使用。 這里是如何實現的 ;
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
,此解析操作才會成功NumberStyles.Float| NumberStyles.AllowThousands
NumberStyles.Float| NumberStyles.AllowThousands
與您的CurrentCulture
設置匹配。
我強烈懷疑您CurrentCulture
的NumberFormatInfo.NumberDecimalSeparator
屬性不是點( .
),這就是為什么您的代碼引發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);
嘗試以下方法:
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);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.