这是让我疯。我有一个ASP.NET web窗体2.0页以下字符串

string s = "0.009";

够简单。现在,如果我的文化是西班牙 - 这是“ES-ES” - 我试图将字符串转换成双层,我做了以下内容:

double d = Double.Parse(s, new CultureInfo("es-ES"));

我期望的是0.009。相反,我得到9.据我所知,.NET认为这是一个千个分隔符,这在EN-US是一个逗号,但它不应该以文化信息,我传递给parse方法和应用正确的格式转化

如果我

double d = 0.009D;
string formatted = d.ToString(new CultureInfo("es-ES"));

格式化现在0009。任何人

有帮助吗?

解决方案

带你给文化和运用正确的格式。您提供的“0.009”的字符串,并告诉它,这是西班牙......那么你抱怨它正确的解读是,西班牙!不要告诉它的字符串是西班牙当你知道它是不是。

您应该通过解析方法的字符串的培养被解析,在这种情况下将是EN-US或烯GB或InvariantCulture的。

其他提示

什么杰斯的写作为我工作。只是任何人谁愿意要尝试如何让“不变的文化”:看起来这个

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

(第一计算器交,所以肯定,而边际)

您有它向后。

当你说double d = Double.Parse(s, new CultureInfo("es-ES"));,你问.NET到您的字符串解析成一个双,假设字符串被写在ES-ES文化。

在西班牙文化, “”是千位分隔符,因此 “0.009” 是9。

当您转换使用的ToString(),到了最后,它说转换0.009使用西班牙文化的字符串,所以它使用“”作为小数点分隔符,你会得到‘0.009’。的行为是正确的。

我的猜测是,你要使用Double.Parse与不变文化和toString与西班牙文化,所以0.009变为0.009。

我觉得你是在解释了错误的方式,在ES-ES文化0.009实际上是说9的只是一个很长的路要走,因为“”是不是小数分隔符,所以如果你问字符串“0.009”是的解析的与ES-ES的文化,你的确应该得到deouble 9.0。如果你问它来解析“0.009”你应该得到的0.009双。

同样,如果你要求它的格式的双重0.009你应该得到的ES-ES字符串 “0.009”。

您会误以为解析和格式化。你得到9,而不是0.009的第一时间,因为你采取的是基于。培养使用,基于文化格式化和分析它的字符串。你需要使用任何文化中,与创建解析它,然后用你想要显示的任何文化进行格式化。

double d = Double.Parse("0,009",
    NumberStyles.AllowDecimalPoint | NumberStyles.AllowThousands,
    CultureInfo.CreateSpecificCulture("es-ES"));

在ES-ES文化 “” 是一个十进制seporator(未 “”)

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top