C# 将字符串转换为十进制:如何在不同区域性中处理十进制分隔符

C# 将字符串转换为十进制:如何在不同区域性中处理十进制分隔符,c#,decimal,cultureinfo,C#,Decimal,Cultureinfo,我需要将十进制值写入ms access数据库,但在不同的区域性中将值转换为十进制时遇到问题。文件中有一个值,由逗号分隔。我尝试: public decimal CSingleCulture (string str) { string sep = System.Globalization.CultureInfo.CurrentCulture.NumberFormat.NumberDecimalSeparator; string s = str.Replace(",", sep);

我需要将十进制值写入ms access数据库,但在不同的区域性中将值转换为十进制时遇到问题。文件中有一个值,由逗号分隔。我尝试:

public decimal CSingleCulture (string str)
{
    string sep = System.Globalization.CultureInfo.CurrentCulture.NumberFormat.NumberDecimalSeparator;
    string s = str.Replace(",", sep);

    return decimal.Parse(s);            
}

如果
NumberDecimalSeparator=“.”
工作正常,但如果
NumberDecimalSeparator=“”,“
问题开始
decimal.Parse
始终返回以点分隔的符。在这种情况下,插入数据库时会发生错误。

处理此问题的建议方法是将值存储为数字而不是字符串。在数据库和程序中。当你这样做的时候,你现在的问题就永远不会出现

只有在显示数字或接受用户输入时,才能处理字符串格式的数字。在这些场景中,您可以使用用户的区域性设置让他们查看并使用他们首选的分隔符


若需要在字符串和数字之间进行转换以实现持久性,则必须使用区域性不变转换。这似乎是你跌倒的地方。我怀疑您读取的文件没有定义良好的格式。确保在读写文件时使用CultureInfo.InvariantCulture。如果文件的格式定义明确,与固定区域性不同,则使用适当的特定区域性信息。

无法真正理解您要实现的目标,我必须同意另一个答案。但另一件值得注意的事情是,您可以使用不变文化,如下所示:

double.Parse("15.0", CultureInfo.InvariantCulture)
无论在当前线程的区域性中设置了什么,这将始终期望字符分隔十进制数字