C# CultureInfo和Double.parse和Double.toString工作不正常

C# CultureInfo和Double.parse和Double.toString工作不正常,c#,.net,double,cultureinfo,.net-4.6.2,C#,.net,Double,Cultureinfo,.net 4.6.2,如何强制c#应用程序使用。用于十进制分隔符,并忽略服务器中的区域性设置。我对double.ToString和double.parse有这个问题 由于应用程序规模很大,我应该更改应用程序级别的设置 在类似double.parse(“1/25”)和1.25 ToString的情况下会发生异常 我尝试过这个代码 string CultureName = Thread.CurrentThread.CurrentCulture.Name; CultureInfo ci = new Cult

如何强制c#应用程序使用。用于十进制分隔符,并忽略服务器中的区域性设置。我对double.ToString和double.parse有这个问题 由于应用程序规模很大,我应该更改应用程序级别的设置

在类似double.parse(“1/25”)和1.25 ToString的情况下会发生异常

我尝试过这个代码

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;
        }
应用程序中的启动请求和方法更改了区域性但无法解决问题

应用程序在.net 3.5中正常工作,但升级到.net 4.6.2后,此问题发生在server 2012和windows 10上。

直接方法是指定
CultureInfo.InvariantCulture

 string source = "1.234";

 double result = double.Parse(source, CultureInfo.InvariantCulture);
方法是将
CultureInfo.InvariantCulture
指定为当前区域性

var saved = Thread.CurrentThread.CurrentCulture;

try {
  Thread.CurrentThread.CurrentCulture = CultureInfo.InvariantCulture;

  ...

  double result = double.Parse(source);

  ... 
}
finally {
  Thread.CurrentThread.CurrentCulture = saved;
}
最后,您可能需要修改现有的当前区域性(某种“应用程序级别”的修复):

直接的方法是指定
CultureInfo.InvariantCulture

 string source = "1.234";

 double result = double.Parse(source, CultureInfo.InvariantCulture);
方法是将
CultureInfo.InvariantCulture
指定为当前区域性

var saved = Thread.CurrentThread.CurrentCulture;

try {
  Thread.CurrentThread.CurrentCulture = CultureInfo.InvariantCulture;

  ...

  double result = double.Parse(source);

  ... 
}
finally {
  Thread.CurrentThread.CurrentCulture = saved;
}
最后,您可能需要修改现有的当前区域性(某种“应用程序级别”的修复):


我定义了一个方法,并在更改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;
        }
    }

我定义了一个方法,并在更改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;
        }
    }

double result=double.Parse(“1.234”,CultureInfo.InvariantCulture)谢谢@Dmitry Bychenko,但我无法更改每个double.parse,因为它已经使用了7000次,而且double.ToString在我们的应用程序中引发了不匹配数据异常。我应该在应用程序级别
double result=double.Parse(“1.234”,CultureInfo.InvariantCulture)中修复谢谢@Dmitry Bychenko,但我无法更改每个double.parse,因为它已经使用了7000次,而且double.ToString在我们的应用程序中引发了不匹配数据异常。我应该固定在应用程序级别