NumberGroupSizes为" en-IN" Windows Server 2012中的文化是错误的

时间:2017-02-13 11:18:08

标签: c# windows-server-2012 cultureinfo

" en-IN"的NumberGroupSizes; culture被设置为3,2,0这是错误的,理想情况下在Windows Server 2012中设置为3。

db.Temperatures.findOne({},{'previsions.1000':1})

上面的代码在Windows Server 2012上运行发出了1234567890,12,345.00这是错误的。理想情况下应该是12,34,56,78,90,12,345.00

1 个答案:

答案 0 :(得分:0)

这背后的原因是存储在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));

如果使用&#34; en-US&#34;创建NumberFormatInfo在#34; NumberGroupSizes&#34;中,它只有一个值。财产和那个价值是&#34; 3&#34;所以输出会将数字除以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
}

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