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;
}
最后,您可能想要修改现有的当前文化(修复"at application level"):
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);
我定义了一个方法,并在应用程序中每个改变文化信息的地方使用它
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;
}
}
如何强制 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;
}
最后,您可能想要修改现有的当前文化(修复"at application level"):
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);
我定义了一个方法,并在应用程序中每个改变文化信息的地方使用它
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;
}
}