C# 当千位分隔符和十进制分隔符相同时进行十进制分析

C# 当千位分隔符和十进制分隔符相同时进行十进制分析,c#,currency,C#,Currency,我正在将全球化应用于一个应用程序,我有以下问题: 默认情况下,我将en US设置为区域性,然后执行格式化以向用户显示格式化的值 string FormattedValue = string.Format("{0:C}", 5000.00); //That returns $5.000.00 然后我需要将该值转换为十进制,也可能有货币符号,但最头痛的是双精度 var DecimalValue = decimal.parse(value,NumberStyles.AllowCurrencySymb

我正在将全球化应用于一个应用程序,我有以下问题:

默认情况下,我将en US设置为区域性,然后执行格式化以向用户显示格式化的值

string FormattedValue = string.Format("{0:C}", 5000.00); //That returns $5.000.00
然后我需要将该值转换为十进制,也可能有货币符号,但最头痛的是双精度

var DecimalValue = decimal.parse(value,NumberStyles.AllowCurrencySymbol);

输入字符串的格式不正确。我知道这是由双重原因造成的。因为当我将区域性(例如)更改为en AU时,在这种情况下,格式化的值是$5000.00,decimal.parse工作得很好。有什么想法吗?

在这一点上,通过我自己的修补,我确信您的系统的区域性设置有问题。我使用的是Win 8.1 x64和.NET 4.5.1,并且:

  CultureInfo.GetCultures(CultureTypes.AllCultures)
    .Where(c => c.NumberFormat.CurrencyDecimalSeparator[0] == c.NumberFormat.CurrencyGroupSeparator[0])
    .ToList()
    .ForEach(c => Console.WriteLine(c.Name));
在我的系统上不打印任何内容


我相信您可以实现自己的IFormatProvider实现,但我真的认为这不能解决您的问题

出现问题-string FormattedValue=string.Format{0:C},5000.00,在我的系统上使用en-US==5000.00设置格式时,Thread.CurrentThread.CurrentCulture.NumberFormat.CurrencyGroupSeparator和Thread.CurrentThread.CurrentCulture.NumberFormat.CurrencyDecimalSeparator的值是多少?请显示正确的设置文化的代码,我没有设置该值,应用程序一直在使用我的PC区域设置中定义的默认值,现在我想知道是否无法将数字转换为使用相同groupSeparator和decimalSeparator的货币字符串。@CSharper好奇,哪个区域性具有相同的十进制和组分隔符?