如何验证基于小数点分隔符的小数?

问题描述:

我想验证数字,我只知道小数点分隔符(点或逗号)如何验证基于小数点分隔符的小数?

例如:n1 = 12.4和n2 = 1,234.5 - >两者对'。'都有效。作为小数点分隔符,并且对于','作为小数点分隔符都是无效的 。

Eg.2:n1 = 12,4和n2 = 1.234,5 - >两者对于','作为小数点分隔符都是有效的,并且对于'。'都是无效的 。作为小数分隔符。

到目前为止我试过了什么?

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

并使用

decimal.Parse(stringValue, cultureInfo); 
  1. 为Eg1 + '' =>都有效OK
  2. 例一+ ''=>都抛出异常OK
  3. 为Eg2 + ''=> N1抛出异常OK,N2抛出异常错误的
  4. 为Eg2 + '' => n1是124错误,n2引发异常确定

你推荐我做什么?

+0

此链接可能会有所帮助:http://stackoverflow.com/questions/1559185/formatting-numbers-as-strings-with-commas-in-place-of-decimals – rsbarro 2013-02-22 15:20:33

可以使用decimal.TryParse而尝试捕捉异常

你可以尝试设置组分隔符,以及 - 这意味着,如果你知道小数点分隔符是一个逗号设置组分隔一个时期:

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

尝试使用

decimal.Parse(stringValue, cultureInfo.NumberFormat); 

使用只有文化是不够的。 看看MSDN

+0

文化应该也是如此 - 它会通过NumberFormat通过。请参阅[本示例](http://msdn.microsoft.com/en-us/library/ew0seb73.aspx) – 2013-02-22 15:23:43

我想你的正常文化是使用','作为组分隔符和'。'作为小数分隔符。因此,通过从不变文化中创建新文化,然后将小数点分隔符设置为'。'。就像无所事事。 另一方面,新创建的文化仍然使用','作为组分隔符,因此通过将小数点分隔符设置为','告诉'''既是组分隔符又是小数点分隔符。 这就是为什么它可以正常测试1和2,并且在其他测试中失败。