代码之家  ›  专栏  ›  技术社区  ›  Bernard Chen

为什么en-za的数字分组和小数分隔符从.NET 3.5更改为.NET 4.0?

  •  3
  • Bernard Chen  · 技术社区  · 14 年前

    我们的系统中有代码,可以根据用户选择的区域设置来格式化数字和货币。我们的一个用户选择了en-za,并注意到随着迁移到.NET 4.0,数字分组和小数分隔符发生了变化。

    我写了一段代码来说明这一变化:

    using System;
    namespace regional
    {
        class Program
        {
            static void Main(string[] args)
            {
                var ci = new System.Globalization.CultureInfo("en-ZA");
                var output = 1234567.00m.ToString("c", ci);
                Console.WriteLine(output);            
            }
        }
    }
    

    在.NET 3.5下,我们得到如下输出:

    R 1,234,567.00
    

    在.NET 4.0下,我们得到如下输出:

    R 1 234 567,00
    

    在.NET 3.5和.NET 4.0之间,十进制分隔符和数字分组的变化是什么原因造成的?

    根据维基百科的说法,“当南非采用公制时,它采用逗号作为小数点分隔符。”这意味着这个设置在某一点上发生了变化,但我仍然不明白为什么不同的框架版本之间的行为不同。

    1 回复  |  直到 14 年前
        1
  •  2
  •   Tom Carver    14 年前

    .NET团队根据消费者的反馈来审查类似的东西——大概有足够多的人请求他们说现有的设置不正确,所以他们更改了这些设置。

    http://msdn.microsoft.com/en-us/library/dd997383.aspx#updated_globalization_property_values

    基本上说“我们在版本之间更新全球化设置”,以及

    http://msdn.microsoft.com/en-us/library/dd997383.aspx#getting_current_globalization_information

    说从Windows7开始,他们实际上从操作系统加载全球化数据(因此,在不同的操作系统、不同的时间点上,en-za可能会出现不同的情况)。阿尔索

    由于世界不断变化,全球化信息随时都会发生变化;开发人员不应期望全球化属性的值在发布之间持续存在,甚至在.NET框架的同一版本中也不会持续存在。