簡體   English   中英

從控制台讀取雙

[英]Reading double from console

如何從控制台讀取double值,例如0.3? 當我使用0.3之前提到的.X鍵入內容時,它將引發Exception。

到目前為止,我已經嘗試過類似的方法:

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

Convert.ToDouble (字符串)方法將Double.ParseCurrentCulture設置一起使用。 這里是如何實現的

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設置匹配。

我強烈懷疑您CurrentCultureNumberFormatInfo.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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM