簡體   English   中英

C#Convert.ToDouble格式異常錯誤

[英]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.

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