【问题标题】:Get number format from OS C#从 OS C# 获取数字格式
【发布时间】:2015-08-20 16:19:10
【问题描述】:

这个问题可能是这个问题的精确副本: Get number format from OS 但似乎我找不到适合 C# 的解决方案。我不想最终使用操作系统的注册表来使其工作。而且由于我在 C# 中,Java 的解决方案是不可能的。

请注意

System.Globalization.CultureInfo.CurrentCulture;
System.Globalization.CultureInfo.InstalledUICulture;
System.Globalization.CultureInfo.CurrentUICulture;

它们都不返回修改后的操作系统首选项。

示例:en-CA 小数点为 '.'和分组将是','。如果我切换它们,则无法通过 InstalledUICulture、CurrentUICulture 和 CurrentCulture 恢复修改

编辑:这是我希望从操作系统获得的信息是的,它是来自其他问题的图像的副本

【问题讨论】:

    标签: c# operating-system number-formatting


    【解决方案1】:

    正如MSDN article 中所述,CultureInfo.InstalledUICulture 属性获取表示随操作系统安装的区域性的 CultureInfo。

    此属性有一个 NumberFormat 字段,其中包含您要查找的信息。

    【讨论】:

    • 去掉第一部分,应该是注释。其余的看起来像一个不错的答案。
    • 如果您在 Windows 操作系统上进行修改,如您 PC 上的图片,然后启动您的 IDE(即使您重新启动 PC),NumberFormat 组和小数分隔符将不会代表您下面的内容您刚刚修改的首选项
    【解决方案2】:
    void Main()
    {
        DescribeIt(System.Globalization.CultureInfo.InstalledUICulture);
        DescribeIt(System.Globalization.CultureInfo.CurrentUICulture);
        DescribeIt(new System.Globalization.CultureInfo("en-US"));
        DescribeIt(new System.Globalization.CultureInfo("fr-FR"));
    }
    
    public void DescribeIt(System.Globalization.CultureInfo ci)
    {
        Console.Write("Culture: {0}", ci);
        Console.Write(@"; NumberFormat.NumberGroupSeparator: ""{0}""", 
            ci.NumberFormat.NumberGroupSeparator);
        Console.Write(@"; NumberFormat.NumberDecimalSeparator: ""{0}""", 
            ci.NumberFormat.NumberDecimalSeparator);
        Console.WriteLine();        
    }
    

    我的机器上的结果:

    文化:en-US NumberFormat.NumberGroupSeparator: "," NumberFormat.NumberDecimalSeparator:“。” 文化:en-US NumberFormat.NumberGroupSeparator: "," NumberFormat.NumberDecimalSeparator:“。” 文化:en-US NumberFormat.NumberGroupSeparator: "," NumberFormat.NumberDecimalSeparator:“。” 文化:fr-FR NumberFormat.NumberGroupSeparator:“” NumberFormat.NumberDecimalSeparator: ","

    如果我将Decimal symbol 更改为“。”和Digit grouping 到“,”在区域和语言控制面板对话框的格式选项卡中的fr-FR设置中,然后运行相同的代码,我得到这个:

    文化:en-US NumberFormat.NumberGroupSeparator: "," NumberFormat.NumberDecimalSeparator:“。” 文化:en-US NumberFormat.NumberGroupSeparator: "," NumberFormat.NumberDecimalSeparator:“。” 文化:en-US NumberFormat.NumberGroupSeparator: "," NumberFormat.NumberDecimalSeparator:“。” 文化:fr-FR NumberFormat.NumberGroupSeparator: "," NumberFormat.NumberDecimalSeparator:“。”

    你得到了什么结果?

    【讨论】:

    • 您的答案有效。但我不明白为什么 InstalledUICulture 不代表我在我的选项中更改的那个(默认选项)。强制它 en-CA 工作得很好。你知道原因吗? (我需要避免强迫一种特定的文化)
    • 你的InstalledUICulture什么?
    • InstalledUICulture 返回 en-US 而我在我的操作系统上使用的默认文化是“匹配 Windows 显示语言”(这是“推荐”的一种,因此是默认的一种)。事实是,“默认”一个不会修改由 InstalledUICulture 表示的那个,这是有问题的
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-08-28
    • 2018-12-13
    • 1970-01-01
    • 2011-05-04
    • 1970-01-01
    • 2016-01-20
    • 1970-01-01
    相关资源
    最近更新 更多