" 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
答案 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
}
我希望这能解决您的问题。