情况 - 我的网络应用程序中的线程文化已设置为“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 失败任何解释都非常感谢!