3

stringaから aを解析する必要がありdecimal、英国またはヨーロッパの文化で使用される可能性があります。

もしヨーロッパの文化2,002

ただし、2,00カンマは 1000 を表すため、英国の文化では無効です。

私が使用する場合

Double.Parse("20,50", new CultureInfo("en-GB")) 

戻ります2050

これにより、無効な例外がスローされると予想していました。

誰でも助けることができますか?

4

3 に答える 3

3

解析文字列内の有効な文字であるため、例外が発生することはありません(おっしゃる,とおり、千単位の区切り記号として解釈されます)。

ただし、2050ではなく、同じコードが表示され20.50ます。

その地域のコントロールパネルでそれらが手動で変更された場合にのみ、カルチャの結果がen-GB表示されると思います(したがって、誰かが小数点区切り記号を に設定し,、千単位区切り記号を ではないものに設定した場合,)。

于 2012-10-01T11:04:59.327 に答える
1

ポイントは、GB 文化の「2,00」は無効であるべきですが、ヨーロッパの文化を使用していたように解析することです。

例外をスローしたい。

対照的に、Double.Parse("20.50", new CultureInfo("fr-FR")) は小数点以下が無効であるため例外をスローします。

では、Double.Parse("20,50", new CultureInfo("en-GB")) にこれが当てはまらないのはなぜですか

于 2012-10-01T11:44:48.123 に答える
0

,更新された質問から、英国の文化で2,0002000、 や. しかし、それは のようにもなり得ます。2,000,00020000002,0,0,02000

その観点から、3 つのシナリオが考えられます。

  1. 常にローカル形式でデータを受信して​​いる場合は、問題はありません。文字列をそのまま解析するだけです (ただし、問題が 1 つあります。ユーザーは文字列の書式設定オプションを変更できるため、新しいデフォルトのローカル カルチャを作成することをお勧めします)。
  2. 定義済みの形式でデータを受信して​​いる場合は、固定カルチャを使用して文字列を解析します。
  3. ローカルに比べて不明な形式でデータを受信して​​います。つまり、ローカルと非ローカルのカルチャ形式の両方を受信できます。これは最悪のケースであり、これに対する一般的な解決策はありません。このタスクがより簡単かどうかに応じて、これをケース 2 または 1 に減らすことをお勧めします。
于 2012-10-01T11:05:43.970 に答える