C#Decimal.Parse逗号问题

时间:2012-10-01 11:01:36

标签: c#

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

如果在欧洲文化2,002

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

如果我使用

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

返回2050

我原以为这会抛出一个无效的异常。

有人可以帮忙吗?

3 个答案:

答案 0 :(得分:3)

应该没有得到异常,因为,是解析字符串中的有效字符(如你所说,它被解释为千位分隔符)。

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

我希望只有在该区域的控制面板中手动更改了en-GB文化的结果才会看到您的结果(如果有人将小数点分隔符设置为,和千位分隔符对于不是,)的东西。

答案 1 :(得分:0)

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

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

  1. 您总是以本地格式接收数据,然后没有问题,您只需解析字符串(但是有一个问题 - 用户可以更改字符串格式选项,因此您可以更好地创建新的默认本地文化)。
  2. 您正在以预定义的格式接收数据,然后使用一些固定的文化来解析字符串。
  3. 您正在以相对于本地的未知格式接收数据,即您可以接收本地和非本地文化格式。这是最糟糕的情况,并没有通用的解决方案。我建议将此减少到案例2或1,具体取决于此任务。

答案 2 :(得分:0)

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

我希望它抛出异常。

相比之下 - Double.Parse(“20.50”,new CultureInfo(“fr-FR”))抛出异常,因为小数位无效。

那么为什么Double.Parse(“20,50”,新的CultureInfo(“en-GB”))

这是真的