繁体   English   中英

CultureInfo和Double.parse和double.toString无法正常工作

[英]CultureInfo and Double.parse and double.toString not worked correctly

如何强制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;
        }

在app_start中开始更改文化但无法解决问题的请求和方法

该应用程序在.net 3.5中正常工作,但升级到.net 4.6.2后,此问题在服务器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 modified = CultureInfo.CurrentCulture.Clone() as CultureInfo;

modified.NumberFormat.NumberDecimalSeparator = ".";

// Business as usual except the decimal separator which is now dot '.' 
Thread.CurrentThread.CurrentCulture = modified;

...

double result = double.Parse(source);

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM