1

オブジェクトを取得して必要な型に変換する数値コンバーターを実装しようとしています。

ただし、問題が見つかりました。「en-US」カルチャで「1,5」をテストすると、Convert.ToSingle および Convert.Double は、この値を変換できないという例外をスローする代わりに、単に「15」を返します。 「1,5」は無効なので期待してください。

誰かが理由を知っていますか?

4

4 に答える 4

3

いいえ、"1,5"完全に有効です。"1,500"に解析する方法に似ています1500。基本的に、グループ セパレータ ( ,en-US) は解析時に単純に無視されます。

これを行いたくない場合は、次を指定しますNumberStyles

int i = int.Parse("1,5", NumberStyles.Integer);

[Flags]これは列挙型であり、重要なことに、 を含めていないことに注意してくださいAllowThousands。別のアプローチは次のとおりです。

int i = int.Parse("1,5", NumberStyles.Any & ~ NumberStyles.AllowThousands);

これにより、グループ セパレータ以外のすべてが許可されます。もちろん、"1,500"今は失敗します。

于 2012-10-19T12:07:20.783 に答える
1

たとえば、ロシア文化 - ru-RU を指定すると機能しますが、en-US を使用する場合はドットを使用する必要があります。

于 2012-10-19T12:07:01.180 に答える
1

コンマは en-US の 3 桁ごとの区切り文字であるため、受け入れられます。

またはを使用する代わりにToDouble()またはToSingle()を使用する代わりに、これらの関数には追加のパラメーターがあり、どの形式を受け入れる/拒否するかをより細かく制御できます-ここのリストを参照してください- たとえば、グループセパレーターを明示的に受け入れ/拒否できます。Double.TryParse()Single.TryParse()style

于 2012-10-19T12:10:24.477 に答える
1

これは、コンマが有効なグループ セパレータであるためです (1000 単位を示すために使用されます)。

したがって、「1,5」は英語を話す人間には意味がありませんが、コンマは解析によって無視されるため、値は「15」として扱われます。

于 2012-10-19T12:07:44.177 に答える