【发布时间】:2013-09-30 11:46:52
【问题描述】:
情况 - 我的网络应用程序中的线程文化已设置为“es”(西班牙语)
Thread.CurrentThread.CurrentUICulture = CultureInfo.CreateSpecificCulture("es");
Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture("es");
字符串值为“0.1” 对于以下表达式,
var value = "0.1"
provider = CultureInfo.CreateSpecificCulture("en-US")
double.TryParse(value.ToString(), NumberStyles.Any, provider, out number)
数字返回 1.0。这让我觉得它正在从线程中挑选文化信息。不是我提供的。
以下单元测试通过(如预期)。
var numberInEnUS = "0.1";
var spanishCulture = CultureInfo.CreateSpecificCulture("es");
culture = new CultureInfo("en-US", false);
Thread.CurrentThread.CurrentCulture = spanishCulture;
Thread.CurrentThread.CurrentUICulture = spanishCulture;
double number;
double.TryParse(numberInEnUs, NumberStyles.Any, culture, out number);
Assert.AreEqual(0.1, number);
那么,问题是为什么 double.TryParse 在我的应用程序中失败了?理论上,西班牙语的 0.1 是 1(西班牙语的分隔符是小数点“.”)。但是,数字 1000.0 不会转换为 10000。所以,它似乎只对 0.1 失败 任何解释都非常感谢!
【问题讨论】:
-
只要您将特定的文化传递给
double.TryParse(),线程的文化应该是无关紧要的。我注意到您没有包含设置提供程序变量的代码;您是否 100% 确定要发送您认为要发送的提供商?顺便说一句,使用CultureInfo.InvariantCulture可能比使用“en-US”更好,尽管它对您的情况没有影响。 -
provider指的是什么?这是最关键的部分,但它缺失了。 -
其实数字是英文的……我改了上面的。
标签: c# globalization cultureinfo tryparse