[英]C#: Dealing with format exception for Convert.ToDouble('Infinity') on Windows 10
[英]c# Convert.ToDouble format exception error
我正在嘗試將此字符串轉換為double
Convert.ToDouble("1.12");
這是輸出
System.FormatException未處理。
我應該做這樣的事情嗎?
public static double ConvertToDouble(string ParseVersion)
{
double NewestVersion;
try
{
NewestVersion = Convert.ToDouble(ParseVersion);
}
catch
{
ParseVersion = ParseVersion.Replace('.', ',');
NewestVersion = Convert.ToDouble(ParseVersion);
}
return NewestVersion;
}
ConvertToDouble("1.12");
還是有一個更簡單的解決方案?
double.Parse
默認情況下將使用當前區域性。 聽起來您想要不變的文化:
double d = double.Parse("1.12", CultureInfo.InvariantCulture);
編輯:為了清楚起見,如果您要解析用戶在不同文化中輸入的文本,顯然您不應該使用此功能。 當您接收到具有不變文化的數據(就像大多數基於文本的機器對機器數據的格式)並且要在解析時強制使用時,可以使用該功能。
您不必更換.
對,
。但是更好的辦法是使用.NET TryParse
方法,如:
double d;
if (double.TryParse("your string data", out d)
{
Console.WriteLine(d);
}
編輯:還請注意,通過替換.
通過,
您得到了錯誤的結果,例如1.12
:
double d = double.Parse(1.12);//d will equals to 1.12
double d = double.Parse(1,12);//d will equals to 112.0
Convert.ToDouble在內部使用Double.Parse。 如果不確定文化背景,則應使用Double.Parse的重載來指定文化:
double d = double.Parse("1.12", CultureInfo.InvariantCulture);
請記住,此問題可能取決於輸入字符串的來源。 如果從數據庫中將其作為對象讀取,則可以通過將其保留為對象並使用Convert.ToDouble()來解決問題,如下所示:
public double Double_fromObject(object obj)
{
double dNum = 0.0;
if (obj.ToString() != string.Empty) // the Convert fails when ""
{
try
{
dNum = Convert.ToDouble(obj);
}
catch (SystemException sex)
{
// this class's error string
LastError = sex.Message;
}
}
return (dNum);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.