情況 - 在我的web應用程序的線程培養已被設置爲「ES」(西班牙語)Double.TryParse轉換0.1-1.0
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)
number returns 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」,儘管它不會影響你的情況。 –
Wat是'提供者'指向?這是最關鍵的部分,它不見了。 –