Double.Parse - 国际化问题

oz.*_*oz. 18 c# string double culture cultureinfo

这真让我抓狂.我在ASP.NET 2.0 WebForm页面中有以下字符串

string s = "0.009";
Run Code Online (Sandbox Code Playgroud)

很简单.现在,如果我的文化是西班牙语 - 这是"es-ES" - 我尝试将字符串转换为Double,我会执行以下操作:

double d = Double.Parse(s, new CultureInfo("es-ES"));
Run Code Online (Sandbox Code Playgroud)

我期待的是0,009.相反,我得到9.我明白.NET认为它是千分隔符,在en-US中是一个逗号,但不应该把我传递给parse方法的文化信息并应用正确的格式转换?

如果我做

double d = 0.009D;
string formatted = d.ToString(new CultureInfo("es-ES"));
Run Code Online (Sandbox Code Playgroud)

格式化现在是0,009.任何人?

Jef*_*tes 20

正在采用您提供的文化并应用正确的格式.你提供了一串"0.009",并告诉它它是西班牙语...然后你抱怨说它正确地解释为西班牙语!当你知道它不是时,不要告诉它字符串是西班牙语.

您应该将Pars方法传递给正在解析的字符串的文化,在这种情况下,它将是en-US或en-Gb或InvariantCulture.


Nic*_*s78 10

杰斯的写作对我有用.只为那些需要尝试如何获得"不变文化"的人:看起来如此

double d = Double.Parse(myString, CultureInfo.InvariantCulture);

(第一个stackoverflow帖子,所以是的,相当边缘;)