[.NET]: CultureInfo....NumberGroupSeparator-rariteiten?

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • Don Kedero
  • Registratie: Mei 2005
  • Laatst online: 26-07 18:45
Wie ziet het probleem? (volgens mij een BUG in Windows of het .NET Framework die zich anders gedraagd op bepaalde Windows-versies)

Ik verwacht dat het volgende stukje code op elke machine (ongeacht de taal) hetzelfde werkt

C#:
1
var nlBE = new System.Globalization.CultureInfo("nl-BE", false);


Echter heb ik ondervonden dat de property

C#:
1
nlBE.NumberFormat.NumberGroupSeparator


Soms een spatie is en soms een punt bevat.

De code
C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
    public static void Main()
    {
        Console.WriteLine(System.Environment.OSVersion);
        Console.WriteLine();

        var nlBE = default(System.Globalization.CultureInfo);
        
        nlBE = new System.Globalization.CultureInfo("nl-BE", false);
        Console.WriteLine("UseUserOverride: {0}", nlBE.UseUserOverride);
        Console.WriteLine("NumberFormat.NumberGroupSeparator: {0}", nlBE.NumberFormat.NumberGroupSeparator);
        Parse("1.000", nlBE);
        
        nlBE = new System.Globalization.CultureInfo("nl-BE", true);
        Console.WriteLine("UseUserOverride: {0}", nlBE.UseUserOverride);
        Console.WriteLine("NumberFormat.NumberGroupSeparator: {0}", nlBE.NumberFormat.NumberGroupSeparator);
        Parse("1.000", nlBE);
    }
    
    private static void Parse(System.String value, System.Globalization.CultureInfo cultureInfo)
    {
        try
        {
            Decimal.Parse(value, cultureInfo);
            Console.WriteLine("OK");
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex.Message);
        }
        finally
        {
            Console.WriteLine();            
        }
    }


Output
.NET Fiddle: https://dotnetfiddle.net/F11Zsb
Microsoft Windows NT 6.2.9200.0

UseUserOverride: False
NumberFormat.NumberGroupSeparator:
Input string was not in a correct format.

UseUserOverride: True
NumberFormat.NumberGroupSeparator:
Input string was not in a correct format.

Meerdere Windows 7 machines
Microsoft Windows NT 6.1.7601 Service Pack 1

UseUserOverride: False
NumberFormat.NumberGroupSeparator: .
OK

UseUserOverride: True
NumberFormat.NumberGroupSeparator: .
OK


Windows 2012 R2
Microsoft Windows NT 6.2.9200.0

UseUserOverride: False
NumberFormat.NumberGroupSeparator:  
Input string was not in a correct format.

UseUserOverride: True
NumberFormat.NumberGroupSeparator:  
Input string was not in a correct format.


Als ik het stukje code in andere online compilers en executions tools smijt zoals http://rextester.com/runcode heb ik hetzelfde gedrag als .NET Fiddler.

Ik kan wel telkens de property instellen, maar dit lijkt mij niet de bedoeling aangezien ik verwacht dat de defaults van CultureInfo overal hetzelfde is.
C#:
1
        nlBE.NumberFormat.NumberGroupSeparator = ".";


Andere topic rond Decimal.Parse maar mij niet verder geholpen hebben (niet volledig hetzelfde probleem)

Tweakers:StackoverflowMSDN

  • R4gnax
  • Registratie: Maart 2009
  • Laatst online: 06-09 17:51
Don Kedero schreef op woensdag 02 september 2015 @ 08:27:
Wie ziet het probleem?

[...]

ik verwacht dat de defaults van CultureInfo overal hetzelfde is.
Dat is je probleem. Die garantie krijg je namelijk enkel voor de Invariant culture data.
MSDN schrijft over de CultureInfo(string, boolean) constructor:
Note that disallowing overrides does not itself guarantee data stability; see the blog entry Culture data shouldn't be considered stable (except for Invariant).

  • Don Kedero
  • Registratie: Mei 2005
  • Laatst online: 26-07 18:45
De quote verklaart alles! Bedankt!