【问题标题】:Defining decimal numbers on different operation system, how to understand if point or comma is used by C#在不同的操作系统上定义十进制数,如何理解 C# 使用点还是逗号
【发布时间】:2011-02-08 08:12:10
【问题描述】:

我编写了一个小程序,该程序在不同操作系统(xp、win7)上的工作方式不同。问题是程序读取了一些浮点数,例如 2,686。

一个操作系统 (win7) 将其转换为 float true,但在 xp 上出错并打印 2686。我如何理解操作系统用于十进制数字的符号?

谢谢。

【问题讨论】:

    标签: c# operating-system decimal


    【解决方案1】:
    string sep = CultureInfo.CurrentCulture.NumberFormat.NumberDecimalSeparator;
    

    【讨论】:

    • 我认为问题是关于小数分隔符,而不是关于分组。
    • @Henk:你是对的。在这种情况下,它将改为NumberDecimalSeparator。已更新。
    • 谢谢你的回答,谢谢大家,答案是正确的。
    【解决方案2】:

    这不取决于操作系统,而是取决于每台 PC 上的(默认)语言设置。

    如果您使用:double value = double.Parse(text);,您将使用用户配置的任何文化。如果您知道输入是某种格式,请使用:

    var ci = CultureInfo.GetCulture("nl-NL");  // dutch
    double value = double.Parse(text, ci);
    

    每个转换的函数都有(1 个或多个)重载以采用 FormattingProvider(文化)。

    【讨论】:

      【解决方案3】:

      使用用户当前文化解析浮点数 double.Parse(string, System.Globalization.CultureInfo.CurrentCulture);

      【讨论】:

        【解决方案4】:

        小数点分隔符由当前文化决定。

        如果您想使用特定字符作为小数分隔符,您可以使用您喜欢的任何分隔符创建自定义NumberFormatInfo 对象。如果你想使用句点作为 deimcal 分隔符,你可以简单地使用InvariantCulture

        double n = Double.Parse(s, CultureInfo.InvariantCulture);
        

        如果你想使用逗号,你可以选择一个有这个的文化,例如瑞典语:

        double n = Double.Parse(s, CultureInfo.GetCultureInfo("sv-SE"));
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-09-22
          • 2017-08-09
          相关资源
          最近更新 更多