2017-02-13 1 views
1

NumberGroupSizes für "en-IN" Kultur ist als 3,2,0 festgelegt, was falsch ist und im Idealfall als 3,2 in Windows Server 2012 festgelegt werden.NumberGroupSizes für "en-IN" Kultur in Windows Server 2012 ist falsch

// 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)); 

Der obige Code lief auf Windows-Server 2012 gibt als 1234567890,12,345.00 ausgegeben, was falsch ist. Idealerweise sollte es 12,34,56,78,90,12,345.00

+0

Klingt nervig, aber was ist die _programming_ Frage? – MSalters

+0

Ich habe gerade die Frage mit Codedetails bearbeitet @MSalters –

+0

Sieht viel mehr wie eine Frage aus, die beantwortet werden kann. Leider nicht von mir, aber StackOverflow hat tausende von C# Experten. – MSalters

Antwort

0

Der Grund dafür sind die in NumberFormatInfo.NumberGroupSizes gespeicherten Werte. Für die Kultur "en-IN" hat diese Eigenschaft Werte {3,2,0}, was bedeutet, dass die erste Gruppe der Zahl, die dem Komma übrig bleibt, 3 Ziffern hat, die nächste Gruppe wird 2 Ziffern haben und der Rest der Nummer wird nicht gruppiert.

Sie können überprüfen, ob dieser Code ausgeführt wird.

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)); 

Wenn Sie mit Number „en-US“ Kultur schaffen es nur einen Wert in „Number“ Eigenschaft haben, und dieser Wert „3“ ist, so dass die Ausgabe der Anzahl in Gruppen von 3 Ziffern teilen wird.

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 

Ihr Problem lösen Sie neue Werte in die Number Eigenschaft des Number wie folgt einstellen müssen.

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 
} 

Ich hoffe, dass dies Ihr Problem lösen wird.

+0

Danke @Chetan aber das ist die Frage. Warum ist es als 3,2,0 für en-IN eingestellt? In allen anderen Servern ist es als 3,2 –

+0

Das könnte coz der aktuellen Nummer Format Einstellung und Kultur des Servers sein. Hast du den Unterschied zwischen allen anderen Servern und diesem Server gesehen? Lass mich darauf zu dir zurückkommen. –

+0

Ja, es unterscheidet sich von allen 2012 Servern. 2008 Server funktioniert einwandfrei und sogar die lokalen Systemeinstellungen stimmen mit 2008 Server überein. –

Verwandte Themen