【问题标题】:Converting string to decimal: how to handle the decimal separator in different cultures将字符串转换为十进制:如何处理不同文化中的小数分隔符
【发布时间】:2013-12-01 08:07:26
【问题描述】:

我需要将十进制值写入 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 以点分隔。在这种情况下,插入数据库时​​会发生错误。

【问题讨论】:

    标签: c# decimal cultureinfo


    【解决方案1】:

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

    您处理字符串格式的数字的唯一时间是当您显示它们或接受用户输入时。在这些情况下,您可以使用用户的文化设置让他们看到并使用他们喜欢的分隔符。

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

    【讨论】:

      【解决方案2】:

      实际上无法理解您要完成什么,我必须同意其他答案。但另一件值得了解的事情是,您可以像这样使用不变文化:

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

      这将始终期望 dot 字符来分隔您的十进制数字,而不管当前线程的文化中设置了什么。

      【讨论】:

        猜你喜欢
        • 2018-04-06
        • 2015-02-18
        • 1970-01-01
        • 2011-10-31
        • 2020-03-29
        • 1970-01-01
        • 2013-02-07
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多