double temp;
temp = (double)Convert.ToDouble("1234.5678");
みなさん、こんにちは。上記のラインが機能しない理由を私は理解できません。上記の行は私に言うランタイムエラーを与えます。
Mscorlib.dllでSystem.FormatExceptionタイプの未処理の例外が発生しました
追加情報:入力文字列の形式が正しくありませんでした。
私の知る限り、Convert
メソッドは現在のロケールを使用してこのような変換を行います。この場合、私はあなたの現在のロケールが小数点としてカンマを期待していると思います。アプリケーションの現在のロケールを設定するか、ドットが使用されている言語/国に変換してください(例:en_US)。このメソッドは、代替ソリューションとしてIFormatProviderを提供するための2番目のオプションパラメーターを提供する必要があります。
例外なく 文字列をdoubleに変換 するには:
Mscorlib.dllでSystem.FormatExceptionタイプの未処理の例外が発生しました
追加情報:入力文字列の形式が正しくありませんでした。
2番目のパラメーター値 CultureInfo.InvariantCulture を指定して、カルチャに依存しないようにします。次に例を示します。
double.Parse("1234.5678", CultureInfo.InvariantCulture)
最初の解決策(他の投稿で述べたとおり):
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;
どういうわけかヨーロッパのローカルを使用しているかもしれません。一部の国では。と、数字が逆になっています。
こんにちは、マリオが地域の設定を考慮して解析する必要があると言っています。
double temp = double.Parse("1234.5678", System.Globalization.CultureInfo.CurrentCulture);
よろしく。
地域の設定を確認してください。小数点記号は「。」である必要があります。
double temp = double.Parse("1234,5678");
上記のコードに問題はありません。問題なく機能し、値1234.5678
が出力されます。 VS2008で試してみました。おそらく、あなたのマシンのロケール設定と関係があるでしょう。
代わりに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.");
}
テキストボックスを空にすると問題が見つかり、このエラーが発生するので、このエラーを処理してみてください。
Mscorlib.dllでSystem.FormatExceptionタイプの未処理の例外が発生しました追加情報:入力文字列の形式が正しくありませんでした。
if (!string.IsNullOrEmpty(Txt1.Text)) {int _qty = (int)Convert.ToInt32(Txt1.Text);}