我遇到了关于文化敏感数字格式的解析/验证的C#(和Java)问题。似乎在数字分组方面,分隔符可以放在.NET中的任何位置。有没有办法强制严格遵守数字分组的使用?例如,请参阅以下内容:
Decimal.Parse("9,0"); /// Returns 90, which is wrong
Decimal.Parse("90,00"); /// Returns 9000, which is wrong
Decimal.Parse("9,000"); /// Returns 9000, which is right
为了使事情复杂化,文化在每组的位数上有所不同。
有什么建议吗?
编辑:有人建议我将CultureInfo添加到Parse()中,但这仍然不能正常工作。例如:
CultureInfo culture = CultureInfo.CreateSpecificCulture("en-US"); /// Murican English
Double.Parse("9,0", culture); /// Returns 90 when it should throw an exception
culture = CultureInfo.CreateSpecificCulture("pt-BR"); /// Brazillian Portuguese
Double.Parse("9.0", culture); /// Returns 90 when it should throw an exception
答案 0 :(得分:0)
您可以在here中找到有关使用CultureInfo culture
解析的信息,如链接中的示例所示
例如
culture = CultureInfo.CreateSpecificCulture("en-US");
number = Double.Parse(value, culture);// 1,304.16 --> 1304.16
但“en-US”无法解析“1 304,16”。 “fr-FR”可以 - >你会得到1304.16
答案 1 :(得分:0)
您应指定 CultureInfo ,因为解析结果依赖于文化,例如
// English, United States:
// "," is a thousand but not decimal separator, decimal separator is "."
// d1 = 90 since "," is NOT a decimal separator
Decimal d1 = Decimal.Parse("9,0", new CultureInfo("en-US")); // <- 90
// Russian, Russia:
// "," is a decimal separator
// d2 = 9.0 since "," is a decimal separator
Decimal d2 = Decimal.Parse("9,0", new CultureInfo("ru-RU")); // <- 9.0
答案 2 :(得分:0)
为了正确解析数字,您肯定需要数字的源文化信息。 请参阅此 Parsing numbers from different cultures in C#