在Windows Server NumberGroupSizes为“EN-IN”文化2012年是错的

2019-09-30 12:39发布

对于“EN-IN”文化NumberGroupSizes被设置为3,2,0这是错误的,最好能在Windows Server 2012中设置为3,2。

// Gets a NumberFormatInfo associated with the en-IN culture.
NumberFormatInfo nfi = new CultureInfo("en-IN", false).NumberFormat;

// Displays a value with the default separator (".").
Int64 myInt = 123456789012345;

Console.WriteLine(myInt.ToString("N", nfi));

上面的代码运行在Windows Server 2012中给出了把尽可能1234567890,12,345.00这是不对的。 理想的情况下应该是12,34,56,78,90,12,345.00

Answer 1:

这背后的原因是存储在值NumberFormatInfo.NumberGroupSizes财产。 对于培养“EN-IN”这个属性具有值{3,2,0}这意味着离开的小数点数的第一组将具有3位数字,下一组将是有2个数字和号码的其余部分将不会被分组。

您可以为运行此代码检查通过。

public static void Main()
{
    NumberFormatInfo nfi = new CultureInfo("en-IN", false).NumberFormat;

    Int64 myInt = 123456789012345;

    Console.WriteLine("NumberGroupSizes.Length : {0}", nfi.NumberGroupSizes.Length);
    for(var i = 0;i<nfi.NumberGroupSizes.Length; i++)
    {
        Console.WriteLine("NumberGroupSizes[{0}] : {1}", i, nfi.NumberGroupSizes[i]);
    }
    Console.WriteLine(myInt.ToString("N",nfi));

如果您在使用创建的NumberFormatInfo“EN-US”文化将在“NumberGroupSizes”属性只有一个值,该值是“3”,所以输出将划分为3个位数组的数量。

NumberFormatInfo nfi = new CultureInfo("en-US", false).NumberFormat;

Int64 myInt = 123456789012345;

Console.WriteLine(myInt.ToString("N", nfi));
// The output will 123,456,789,012,345.00

为了解决您的问题,您需要设置新值的NumberFormatInfo的NumberGroupSizes属性如下。

public static void Main()
{
    NumberFormatInfo nfi = new CultureInfo("en-IN", false).NumberFormat;

    Int64 myInt = 123456789012345;

    int[] x = {3,2};
    nfi.NumberGroupSizes = x;
    Console.WriteLine(myInt.ToString("N",nfi));
    //The output will be 12,34,56,78,90,12,345.00
}

我希望这将解决您的问题。



文章来源: NumberGroupSizes for “en-IN” culture in windows server 2012 is wrong