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 + '.' => 两者都有效
  2. eg1 + ',' => 都抛出异常 OK
  3. eg2 + ',' => n1 抛出异常 OK , n2 抛出异常 WRONG
  4. 例如 2 + '.' => n1 是 124 错误,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

我想您的正常文化是使用“,”作为组分隔符和“。” 作为小数分隔符。因此,通过从不变的文化创建新的文化,然后将小数点分隔符设置为“。” 就像什么都不做。另一方面,新创建的区域性仍然使用“,”作为组分隔符,因此通过将小数分隔符设置为“,”,您可以告诉“,”既是组分隔符又是小数分隔符。这就是为什么它在测试 1 和 2 中运行良好而在其他测试中失败的原因。

于 2013-02-22T15:37:34.907 回答
0

您可以decimal.TryParse改为尝试捕获异常

于 2013-02-22T15:18:57.400 回答
0

尝试使用

decimal.Parse(stringValue, cultureInfo.NumberFormat);

仅使用文化是不够的。看看MSDN

于 2013-02-22T15:20:16.090 回答