我需要将 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种可能的情况: