C# 字符串到数字的转换和组分隔符

C# 字符串到数字的转换和组分隔符,c#,parsing,cultureinfo,C#,Parsing,Cultureinfo,当我尝试使用Parse或TryParse或convert.ChangeType将字符串转换为数值时,我无法管理系统中定义的小数点分隔符: 如果我进入: var d = double.Parse("1,234", CultureInfo.CurrentUICulture); 它不返回1234 如果要使用组分隔符,必须键入: var d = double.Parse("1,234", NumberStyles.Number, CultureInfo.CurrentUICulture); 这一次,

当我尝试使用Parse或TryParse或convert.ChangeType将字符串转换为数值时,我无法管理系统中定义的小数点分隔符:

如果我进入:

var d = double.Parse("1,234", CultureInfo.CurrentUICulture);
它不返回1234

如果要使用组分隔符,必须键入:

var d = double.Parse("1,234", NumberStyles.Number, CultureInfo.CurrentUICulture);
这一次,结果是预期的结果

但是,我不想强制使用千分隔符,我只想在系统在全球化设置中指定它时使用它。是否有办法知道是否使用了分隔符(我知道我可以在
CultureInfo.currentui.NumberFormat.NumberGroupSeparator
中读取组分隔符)

干杯
Loic

您可以随时使用您使用的第二行

var d = double.Parse("1,234", NumberStyles.Number, CultureInfo.CurrentUICulture);

因为它将正确地转换1234和1234,并且在使用“.”作为组分隔符的系统上,它应该包含1.234,因此具有
编号的组分隔符(包括
允许的数量)不需要逗号-它只允许逗号。因此,您可以使用带逗号或不带逗号的
Number
。或者使用
Any
allowthands


请注意,“逗号”可与“千位分隔符”互换,即在某些Eurupe中,逗号可能会有所不同(句号等)。如果表示“逗号为千”,则使用固定区域性(例如
不变区域性
)。

应使用
当前区域性
而不是
当前UICulture
解析用户输入


属性
CurrentUICulture
指的是显示用户界面的语言,属性
CurrentCulture
指的是Windows中指定的当前区域设置。这样,使用提供翻译成英语的用户界面(
CurrentUICulture
)的应用程序的用户仍然可以查看/输入,例如,日期和数字,格式为他在Windows中设置的区域设置(
CurrentCulture
)。

是,但事实上,我想使用Convert.ChangeType函数来创建一个通用的字符串到数字转换器,并将其作为字符串扩展提供。但是Convert.ChangeType没有带有NumberStyles参数的重载。它只允许一个IFormatProvider参数。顺便说一句,我不明白的是,为什么解析的defaut设置不符合我的系统国际设置,其中设置了组分隔符。您好,谢谢您的帮助。我的应用程序允许用户在运行时更改语言(我们提供7种不同的语言)。当用户选择一种语言时,我们会更改CurrentUICulture和CurrentCulture。我们希望用户查看/输入日期和数字作为所选语言,而不是作为系统中设置的语言环境。我同意。但我的问题是(断言区域性是'fr-fr',千位分隔符是一个空格字符),原因是:下面的行可以工作:double d=(double)Convert.ChangeType(“1234”,typeof(double),_culture);而下一行抛出一个格式异常?inti=(int)Convert.ChangeType(“1234”,typeof(int),_culture);