2011-12-19 3 views
2

xmlファイルを解析していますが、xmlファイルから読み取った値をdouble変数に代入しようとしています。ここConvert.ToDoubleは不明な理由でSystem.FormatExceptionをスローします

double someDouble = Convert.ToDouble(someString); 

問題は、このコード行を実行するとき、私はタイプ「にSystem.FormatException」の未処理の例外がで発生した

を取得し、次のとおりです。ここ

は私のコードは次のようになります mscorlib.dll

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

デバッグすると、「ローカル」ビューでsomeStringの値が「45.00000000」であることがわかります。

私が知る限り、Convert.ToDoubleはそのような変換文字列を2重にサポートしています。

:念のためには、私はまた、

double someDouble = Convert.ToDouble(someString.Trim('"')); 
+3

現在のカルチャーを 'en-US'に設定すると、上記のコードは正常に動作します。ここには何か他のことがあります。 FWIW、例外は「何もない理由で」**投げられない**です。 – Yuck

+1

使用しているコードを正確に投稿できますか?あなたの問題を引き起こす理由は45.000000ではありません。あなたのポストのすべてを取り除き、あなたのコードを投稿し、あなたが持っている単数の質問を出してください。参照リンク:http://msdn.microsoft.com/en-us/library/zh1hkw6k.aspx –

+0

Xml要素の値を文字列someStringにどのように代入していますか? –

答えて

11

それは私のために正常に動作を試してみました。

私の精神的なデバッグのスキルは、,を小数点の区切り文字として使用するカルチャーで実行されていると伝えています。
合格CultureInfo.InvariantCulture

+0

私にとってそれは驚くべきことですが、これは本当に効果的でした。 MSDNでは、Convert.ToDoubleはドット(。)を10進数のseperatorとして受け入れますが、CultureInfoを使用する必要があることは暗黙的にも明示的にも言及していません。InvariantCulture –

1

私はそれを試してみて、私は結果を教えてください。「"」トリムを呼び出すことなく、パラメータを指定せずにしようとするだろう。

+0

問題はculture(CultureInfo.InvariantCultureはConvert.ToDoubleの2番目のパラメータ) –

0
double someDouble = Convert.ToDouble("45.00000000"); //returns 45.0 
+0

私はmydubを離れるように言います..申し訳ありません..私は編集します – MethodMan

2

あなたが書いたコードはそう長く変換された文字列が実際にあるように動作するはずです

これはあなたの特定の問題を解決することはできませんが、代わりにDouble.TryParseをお勧めします。これは、あなたが見ていない文字列のどこかに番号がありません。 Double.TryParse

で例外がスローされる可能性はほとんどありません
関連する問題