質問

この文字列をダブルに変換しようとしています

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帰属
所属していません StackOverflow
scroll top