2

有一种方法可以验证当前文化中的双数吗?我试过这个:

var number ="10,10";
double value = double.Parse(number,
                    NumberStyles.Float, 
                    CultureInfo.CurrentCulture);

如果我尝试使用“es-ES”(其中小数点分隔符为“,”),则解析工作完美,我得到一个 double 10.10,但如果我尝试使用“en-US”(其中小数点分隔符为“.”)解析无法理解小数点,所以就省略了,所以我得到一个1010不正确的数字。

当我尝试为指定的文化转换错误的数字时,有办法让我得到一个例外吗?

编辑:“,”我不是指千位分隔符,我指的是像 es-ES 这样的文化的小数分隔符

4

1 回答 1

3

在我的机器上,下面会抛出一个 FormatException,正如预期的那样:

var number ="10,10";
double value = double.Parse(number,
NumberStyles.Float, 
CultureInfo.InvariantCulture);

我怀疑你正在使用NumberStyles.AllowThousands. 例如,以下将返回 1010:

var number ="10,10";
double value = double.Parse(number,
NumberStyles.Float | NumberStyles.AllowThousands, 
CultureInfo.InvariantCulture);

更新

回应评论:

...但如果我使用 en-US "10,10" 变成 "1010" 而不是抛出错误

这不是我所期望的。例如,以下将抛出一个FormatException

var number ="10,10";
double value = double.Parse(number,
NumberStyles.Float, 
new CultureInfo("en-US"));
于 2015-06-17T13:20:53.347 回答