我需要将十进制值写入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(s)
总是返回vlaues,以点分隔。在这种情况下,当插入数据库时会发生错误。 最佳答案
推荐的处理方法是将值存储为数字而不是字符串。无论是在数据库中还是在您的程序中。当您这样做时,您当前的问题根本就不会出现。
唯一以字符串格式处理数字的时间是显示它们或接受用户输入的时间。在这些情况下,您可以使用用户的区域性设置让他们看到并使用他们喜欢的分隔符。
如果您需要在字符串和数字之间进行转换以保持持久性,则必须使用区域性不变转换。这似乎是您跌倒的地方。我怀疑您读取的文件没有明确定义的格式。确保在读写文件时使用CultureInfo.InvariantCulture。如果文件确实具有与不变区域性不同的明确定义的格式,请使用适当的特定CultureInfo。