3

我需要将 a 解析string为 a decimal,它可能会在英国或欧洲文化中使用。

如果在欧洲文化2,002

但是,2,00在英国文化中是无效的,因为逗号表示一千。

如果我使用

Double.Parse("20,50", new CultureInfo("en-GB")) 

它返回2050

我本来希望这会引发无效的异常。

任何人都可以帮忙吗?

4

3 回答 3

3

您不应该遇到异常,因为,解析字符串中的有效字符也是如此(正如您所说,它被解释为千位分隔符)。

但是,我看到2050的是同一段代码,而不是20.50.

我希望en-GB仅当在该区域的控制面板中手动更改了文化结果(因此,如果有人将小数分隔符设置为,,千位分隔符设置为非,)。

于 2012-10-01T11:04:59.327 回答
1

关键是 GB culutre 中的“2,00”应该是无效的,但它会像使用欧洲文化一样解析它。

我希望它抛出异常。

相反 - Double.Parse("20.50", new CultureInfo("fr-FR")) 抛出异常,因为小数位无效。

那么为什么 Double.Parse("20,50", new CultureInfo("en-GB")) 不是这样

于 2012-10-01T11:44:48.123 回答
0

从更新的问题中,我可以看出英国文化可能使用,字符作为可能的地方分隔字符,例如2,000代表20002,000,0002000000但它也可以是2,0,0,0,它仍然是2000

从这个角度来看,有3种可能的情况:

  1. 您总是以本地格式接收数据,那么就没有问题,您只需按原样解析字符串(但是有一个问题 - 用户可以更改字符串格式选项,因此您最好创建新的默认本地文化)。
  2. 您正在以预定义的格式接收数据,然后您使用一些固定的文化来解析字符串。
  3. 您正在接收与本地相关的未知格式的数据,即您可以接收本地和非本地文化格式。这是最坏的情况,对此没有通用的解决方案。我建议将此减少到案例 2 或 1,这取决于此任务是否更容易。
于 2012-10-01T11:05:43.970 回答