web-dev-qa-db-ja.com

入力文字列は正しい形式ではありません#2

double temp;
temp = (double)Convert.ToDouble("1234.5678");

みなさん、こんにちは。上記のラインが機能しない理由を私は理解できません。上記の行は私に言うランタイムエラーを与えます。

Mscorlib.dllでSystem.FormatExceptionタイプの未処理の例外が発生しました

追加情報:入力文字列の形式が正しくありませんでした。

13
Keith Loughnane

私の知る限り、Convertメソッドは現在のロケールを使用してこのような変換を行います。この場合、私はあなたの現在のロケールが小数点としてカンマを期待していると思います。アプリケーションの現在のロケールを設定するか、ドットが使用されている言語/国に変換してください(例:en_US)。このメソッドは、代替ソリューションとしてIFormatProviderを提供するための2番目のオプションパラメーターを提供する必要があります。

23
Mario

例外なく 文字列をdoubleに変換 するには:

Mscorlib.dllでSystem.FormatExceptionタイプの未処理の例外が発生しました

追加情報:入力文字列の形式が正しくありませんでした。

2番目のパラメーター値 CultureInfo.InvariantCulture を指定して、カルチャに依存しないようにします。次に例を示します。

double.Parse("1234.5678", CultureInfo.InvariantCulture) 
21

最初の解決策(他の投稿で述べたとおり):

double temp = double.Parse("1234.5678", CultureInfo.InvariantCulture);

2番目の解決策-現在のスレッドをデフォルトにします:

Thread.CurrentThread.CurrentCulture = CultureInfo.InvariantCulture;
double temp = double.Parse("1234.5678");

3番目の解決策-デフォルトでコードブロックにする:

var prevCurrentCulture = Thread.CurrentThread.CurrentCulture;
Thread.CurrentThread.CurrentCulture = CultureInfo.InvariantCulture;
...
double temp = double.Parse("1234.5678");
...
Thread.CurrentThread.CurrentCulture = prevCurrentCulture;
10
Bachor

どういうわけかヨーロッパのローカルを使用しているかもしれません。一部の国では。と、数字が逆になっています。

5
Steve Wellens

こんにちは、マリオが地域の設定を考慮して解析する必要があると言っています。

double temp = double.Parse("1234.5678", System.Globalization.CultureInfo.CurrentCulture);

よろしく。

4
Marco Medrano

地域の設定を確認してください。小数点記号は「。」である必要があります。

2
double temp = double.Parse("1234,5678");
0
Achilleterzo

上記のコードに問題はありません。問題なく機能し、値1234.5678が出力されます。 VS2008で試してみました。おそらく、あなたのマシンのロケール設定と関係があるでしょう。

0
Kumar

代わりにTryParseを使用することをお勧めします。これにより、解析の例外を処理する必要がなくなります。

double temp = 0;
if (double.TryParse("123.456", out temp)
{
    Console.WriteLine(string.Format("Parsed temp: {0}", temp);
}
else
{
    Console.WriteLine("Input value was not able to be parsed.");
}
0
Mike Atlas

テキストボックスを空にすると問題が見つかり、このエラーが発生するので、このエラーを処理してみてください。

Mscorlib.dllでSystem.FormatExceptionタイプの未処理の例外が発生しました追加情報:入力文字列の形式が正しくありませんでした。

if (!string.IsNullOrEmpty(Txt1.Text)) {int _qty = (int)Convert.ToInt32(Txt1.Text);}
0
Tahir Shahzad