Search code examples
c#decimalcultureinforegion

Regional decimal seperator input


Computers in my country do not accept decimals with a '.' they only accept ','

How do I write a program which would accept 12.5 from the console as a decimal number?


Solution

  • Use CultureInfo. If you are sure that using decimal dot is a standard in your country then use your country's CultureInfo. You can simply check if it is.

    // Change kk-KZ to your culture code
    decimal dec = decimal.Parse(str, new CultureInfo("kk-KZ")); 
    

    Or you can use InvariantCulture and NumberStyles.Any:

    decimal dec = decimal.Parse(str, NumberStyles.Any, CultureInfo.InvariantCulture);
    

    I will implement the second one as I don't know where you are from.
    Here it is in an console application and it works for me:

    public static void Main()
    {
        string str;
    
        str = Console.ReadLine();
    
        decimal dec = decimal.Parse(str, NumberStyles.Any, CultureInfo.InvariantCulture);
        double db = double.Parse(str, NumberStyles.Any, CultureInfo.InvariantCulture);
    
        Console.WriteLine(dec.ToString("F2", CultureInfo.InvariantCulture));
        Console.WriteLine(db.ToString("F2", CultureInfo.InvariantCulture));
    
        return;
    }