我需要将 a 解析string
为 a decimal
,它可能会在英国或欧洲文化中使用。
如果在欧洲文化2,00
中2
但是,2,00
在英国文化中是无效的,因为逗号表示一千。
如果我使用
Double.Parse("20,50", new CultureInfo("en-GB"))
它返回2050
我本来希望这会引发无效的异常。
任何人都可以帮忙吗?
我需要将 a 解析string
为 a decimal
,它可能会在英国或欧洲文化中使用。
如果在欧洲文化2,00
中2
但是,2,00
在英国文化中是无效的,因为逗号表示一千。
如果我使用
Double.Parse("20,50", new CultureInfo("en-GB"))
它返回2050
我本来希望这会引发无效的异常。
任何人都可以帮忙吗?
您不应该遇到异常,因为,
解析字符串中的有效字符也是如此(正如您所说,它被解释为千位分隔符)。
但是,我看到2050
的是同一段代码,而不是20.50
.
我希望en-GB
仅当在该区域的控制面板中手动更改了文化结果(因此,如果有人将小数分隔符设置为,
,千位分隔符设置为非,
)。
关键是 GB culutre 中的“2,00”应该是无效的,但它会像使用欧洲文化一样解析它。
我希望它抛出异常。
相反 - Double.Parse("20.50", new CultureInfo("fr-FR")) 抛出异常,因为小数位无效。
那么为什么 Double.Parse("20,50", new CultureInfo("en-GB")) 不是这样
从更新的问题中,我可以看出英国文化可能使用,
字符作为可能的地方分隔字符,例如2,000
代表2000
和2,000,000
。2000000
但它也可以是2,0,0,0
,它仍然是2000
。
从这个角度来看,有3种可能的情况: