9

この文字列を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");

または、より簡単な解決策はありますか?

4

4 に答える 4

30

double.Parseデフォルトでは現在のカルチャを使用します。不変の文化が必要なようです。

double d = double.Parse("1.12", CultureInfo.InvariantCulture);

編集:明確にするために、異なる文化のユーザーによって入力されたテキストを解析しようとしている場合は、明らかにこれを使用しないでください。これは、不変のカルチャでデータを受信(ほとんどのマシン間データのテキストベースの形式がそうであるように)、解析時にそれを強制したい場合に使用します。

于 2011-07-23T12:49:12.823 に答える
3

...に 置き換える必要はありませんが、次のような,.netTryParseメソッドを使用することをお勧めします。

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
于 2011-07-23T12:45:56.790 に答える
2

Convert.ToDoubleは、内部でDouble.Parseを使用します。カルチャのコンテキストがわからない場合は、Double.Parseのオーバーロードを使用してカルチャを正確に評価する必要があります。

double d = double.Parse("1.12", CultureInfo.InvariantCulture);
于 2011-07-23T12:49:46.380 に答える
0

この問題は、入力文字列の出所によって異なる可能性があることに注意してください。データベースからオブジェクトとして読み取られる場合は、オブジェクトとして保持し、次のように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);
    }
于 2014-08-12T15:48:15.047 に答える