Search code examples
c#.netdoublecultureinfo.net-4.6.2

CultureInfo and Double.parse and double.toString not worked correctly


How can I force c# application to use . for decimal separator and ignore culture settings in server. I have this problem with double.ToString and double.parse I should change setting in application level because of large scale of application.

exception occurse in case like double.parse("1/25") and 1.25 ToString

I have Try This code

string CultureName = Thread.CurrentThread.CurrentCulture.Name;
        CultureInfo ci = new CultureInfo(CultureName);
        if (ci.NumberFormat.NumberDecimalSeparator != ".")
        {
            // Forcing use of decimal separator for numerical values
            ci.NumberFormat.NumberDecimalSeparator = ".";
            Thread.CurrentThread.CurrentCulture = ci;
        }

in app_start begin request and method that change culture but can't solve problem

The application was working correctly in .net 3.5 but after upgrade to .net 4.6.2 this problems happened on server 2012 and windows 10.


Solution

  • I defined a method and use it in every where in application that changes cultureinfo

    public static void CorrectNumberFormat()
        {
            var culture = CultureInfo.CreateSpecificCulture(CultureInfo.CurrentCulture.Name);
            if (culture.NumberFormat.NumberDecimalSeparator != ".")
            {
                culture.NumberFormat.NumberDecimalSeparator = ".";
                culture.NumberFormat.CurrencyDecimalSeparator = ".";
                culture.NumberFormat.PercentDecimalSeparator = ".";
                CultureInfo.DefaultThreadCurrentCulture = culture;
                CultureInfo.DefaultThreadCurrentUICulture = culture;
    
                Thread.CurrentThread.CurrentCulture = culture;
                Thread.CurrentThread.CurrentUICulture = culture;
            }
        }