2017-02-13 28 views
1

NumberGroupSizes для культуры «en-IN» задано как 3,2,0, что неверно и в идеале должно быть установлено как 3,2 на сервере Windows 2012.NumberGroupSizes для культуры «en-IN» на сервере Windows 2012 не так

// 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 = 123456789; 

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

Приведенный выше код работает на сервере Windows 2012 выдает 1234567890,12,345.00, что неверно. В идеале это должно быть 12,34,56,78,90,12,345.00

+0

Звучит раздражающе, но что такое _programming_ вопрос? – MSalters

+0

Я только что редактировал вопрос с кодовыми подробностями @MSalters –

+0

Выглядит скорее как вопрос, на который можно ответить. К сожалению, не я, но StackOverflow имеет тысячи экспертов C#. – MSalters

ответ

0

Причина этого - значения, хранящиеся в собственности NumberFormatInfo.NumberGroupSizes. Для культуры «en-IN» это свойство имеет значения {3,2,0}, что означает, что первая группа числа, оставшегося до десятичной точки, будет иметь 3 цифры, следующая группа будет иметь 2 цифры, а остальная часть номера не будет сгруппирована.

Вы можете проверить, как работает этот код.

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

    Int64 myInt = 123456789; 

    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 = 123456789; 

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

Чтобы решить проблему, с которой нужно установить новые значения свойства NumberGroupSizes в NumberFormatInfo следующим образом.

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

    Int64 myInt = 123456789; 

    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 
} 

Я надеюсь, что это решит вашу проблему.

+0

Спасибо @Chetan, но это вопрос. Почему он установлен как 3,2,0 для en-IN? На всех других серверах его значение равно 3,2 –

+0

. Это может быть связано с настройкой текущего формата и культурой сервера. Вы видели эту разницу между всем другим сервером и этим сервером? Позволь мне вернуться к тебе. –

+0

Да, он отличается от всех серверов 2012 года. Серверы 2008 года отлично работают, и даже локальные параметры системы соответствуют серверам 2008 года. –