对于“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
这背后的原因是存储在值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
}
我希望这将解决您的问题。