0

数値を検証したいのですが、小数点記号 (ドットまたはカンマ) しか知りません

例 1: n1=12.4 および n2=1,234.5 -> 両方とも '.' に有効です。',' を小数点記号として使用することはできません。両方とも無効です。

例 2: n1=12,4 および n2=1.234,5 -> ',' はどちらも小数点記号として有効で、両方とも '.' は無効です。小数点として。

これまでに何を試しましたか?

CultureInfo cultureInfo = CultureInfo.InvariantCulture.Clone() as CultureInfo;
cultureInfo.NumberFormat.NumberDecimalSeparator = myDecimalSeparator;

と使用

decimal.Parse(stringValue, cultureInfo);
  1. 例1 + '.' => 両方有効 OK
  2. Eg1 + ',' => どちらも例外をスロー OK
  3. Eg2 + ',' => n1 は例外 OK をスローし、n2 は例外 WRONG をスローします
  4. 例2 + '.' => n1 は 124 WRONG で、n2 は例外 OK をスローします

あなたは私に何をすすめますか?

4

4 に答える 4

2

グループ区切り記号も設定してみてください。つまり、小数点区切り記号がコンマであることがわかっている場合は、グループ区切り記号をピリオドに設定します。

CultureInfo cultureInfo = CultureInfo.InvariantCulture.Clone() as CultureInfo;
cultureInfo.NumberFormat.NumberDecimalSeparator = myDecimalSeparator;
cultureInfo.NumberFormat.NumberGroupSeparator = myGroupSeparator;
于 2013-02-22T15:19:40.237 に答える
0

代わりに使用decimal.TryParseして、例外をキャッチしようとすることができます

于 2013-02-22T15:18:57.400 に答える
0

使ってみて

decimal.Parse(stringValue, cultureInfo.NumberFormat);

文化を利用するだけでは不十分です。MSDNを見てください。

于 2013-02-22T15:20:16.090 に答える
0

あなたの通常の文化では、「、」をグループ区切り記号として使用し、「。」を使用していると思います。小数点として。そのため、インバリアント カルチャから新しいカルチャを作成し、小数点記号を '.' に設定します。何もしないに等しい。一方、新しく作成されたカルチャはグループ区切り記号として「,」を使用しているため、小数点区切り記号を「,」に設定することで、「,」がグループ区切り記号と小数点区切り記号の両方であることがわかります。これが、テスト 1 と 2 では問題なく動作し、他のテストでは失敗する理由です。

于 2013-02-22T15:37:34.907 に答える