How to make InvariantCulture recognize a comma as a decimal separator?

29,649

One of articles you've linked says "The invariant culture is internally associated with the English language". So 'InvariantCulture' doesn't mean "try to match any culture". It means: Ignore the local system culture settings and treat this number as formatted in specific standard (basically: English culture standard). So if you want to handle different formats, your options here are:

  1. Try parsing the number without specyfing culture (will use local OS culture info), then try with InvariantCulture, then maybe try some fallback culture you expect the number to be formatted with.
  2. Replace ',' with '.' and parse the number string using Invariant culture. You may want to make sure that the number string does not contain decimal group separators (like 1,000.00).
Share:
29,649
default
Author by

default

Working as a Software Developer writing various C#, trying out react and typescript and stuff.

Updated on July 18, 2022

Comments

  • default
    default almost 2 years

    How do I parse 1,2 with Single.Parse? The reason of asking is because, when I am using CultureInfo.InvariantCulture I don't get 1.2 as I would like, but rather 12.

    Shouldn't "Invariant Culture" ignore the culture?

    Consider the following example:

    using System;
    using System.Globalization;
    
    public class Program
    {
        public static void Main()
        {
            Console.WriteLine(Single.Parse("1,2", CultureInfo.InvariantCulture));
            Console.WriteLine(Single.Parse("1.2", CultureInfo.InvariantCulture));
            float value;
            Console.WriteLine(Single.TryParse("1,2", NumberStyles.Float, CultureInfo.InvariantCulture, out value));
            Console.WriteLine(Single.TryParse("1,2", out value));
            Console.WriteLine(value);
        }
    }
    

    The output of this will be

    12
    1.2
    False
    True
    12

    But I was expecting:

    1.2
    1.2
    True
    True
    1.2

    Based on my reading of InvariantCulture I should get that result, however I am not.