double.Parse引发了System.FormatException异常

5

我正在尝试将一些字符串解析成双精度值,使用这个解析方法重载:

double.Parse("198.222213745118", CultureInfo.CurrentUICulture);

当前的CultureInfo.CurrentUICulture是fr-FR。 但这会抛出一个类型为FormatException的异常。

可能的原因是什么?


3
"198.222213745118" 应该改为 "198,222213745118" (小数点改为逗号)? - Alessandro D'Andria
没错,但我认为这是 double.parse 方法的工作。 - user2717436
2
使用 CultureInfo.InvariantCulture - sa_ddam213
1
不,它不能完全普遍地做到这一点。例如,在英国,“1,234”表示“一千二百三十四”,而在法国则略高于“1”。 - Bathsheba
如果您可以控制字符串,您可能希望使用NumberDecimalSeparator - Sayse
显示剩余2条评论
3个回答

5

法语(即fr-FR)使用逗号来表示小数部分的开始,而不是句点。他们使用句点来分隔千位。


当然可以,但为此我将我的文化发送到解析方法中。 - user2717436
@user2717436,文化需要与UI控件中的一致。 - Bathsheba
是的,确切地说,千位分隔符只存在于书面语言中,这与罗马尼亚文化相同。double.Parse 不会接受 .,它会抛出异常。 - Eduard Dumitru
那我该怎么做呢?我的意思是,这个字符串是从xml文件中读取的,我就像这样得到它(用“,”作为分隔符)。我如何根据我的文化解析它为双精度数? - user2717436
XML文件应该使用特定格式。请指定一种具有与XML文件中使用的格式一致的文化。 - Klas Lindbäck

0

我知道这个问题很旧,但我的答案可能会帮助其他人。 所以这就是答案:

double.Parse("198.222213745118", System.Globalization.NumberStyles.AllowDecimalPoint, System.Globalization.NumberFormatInfo.InvariantInfo);

替代

double.Parse("198.222213745118", CultureInfo.CurrentUICulture);

-2

我建议使用Double.TryParse而不是.Parse,因为它更安全,并确保在解析时不会出现任何异常。

这里有一段代码供您使用,

double answer = -1;
Double.TryParse("Value", out answer);

现在你需要做的就是编写一个条件语句,检查它是否确实解析了该字符串。

2
非常糟糕的想法,因为存在歧义。例如,对于1,234会执行什么操作? - Bathsheba

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接