c#convert.todoubleフォーマット例外エラー
-
22-10-2019 - |
質問
この文字列をダブルに変換しようとしています
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);
}
所属していません StackOverflow