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



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

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)总是返回用点分隔的值。在这种情况下,当插入数据库时会发生错误。

处理此问题的推荐方法是将值存储为数字而不是字符串。在数据库和程序中。当你这样做的时候,你目前的问题根本不会出现。

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

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

实际上无法理解你想要实现的目标,我不得不同意另一个答案。但另一件很好的事情是,你可以像这样使用不变的文化:

double.Parse("15.0", CultureInfo.InvariantCulture)

不管在当前线程的区域性中设置了什么,这总是需要dot字符来分隔您的十进制数字。

最新更新