字符串到数字转换和组分隔符

时间:2010-03-05 12:40:02

标签: 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);

这一次,结果是预期的结果。

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

干杯 卢瓦克

3 个答案:

答案 0 :(得分:2)

Number(包括AllowThousands)不会要求一个逗号 - 只需允许它。因此,您可以使用带有或不带逗号的Number。或使用AnyAllowThousands

请注意,“逗号”可以与“千位分隔符”交换 - 即在某些Eurupe中它可以变化(句号等)。如果表示“逗号为数千”,则使用固定文化(例如InvariantCulture)。

答案 1 :(得分:0)

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

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

因为它将正确转换1234以及1,234,它应覆盖使用'。'的系统上的1.234。作为组分隔符

答案 2 :(得分:0)

您应该使用CurrentCulture解析用户输入,而不是CurrentUICulture

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