2

我使用 Visual Studio 2010。我的代码有一个奇怪的行为

使用此代码,我可以解析 xml 文件。

XDocument document = XDocument.Load("http://www.studiovincent.net/list.xml");
XElement resourcesElement = document.Root.Element("resources");
XElement resourceElementVincent = (from resourceElement in resourcesElement.Elements("resource")
                                           where resourceElement.Elements("field").Single(fieldElement => fieldElement.Attribute("name").Value == "name").Value == "Vincent"
                                           select resourceElement).Single();

decimal tasso = Math.Round(decimal.Parse(resourceElementVincent.Elements("field").Single(fieldElement => fieldElement.Attribute("name").Value == "age").Value) / Convert.ToInt64(1.00E+006), 6);


string gigi = Math.Round(41 * tasso, 4).ToString();
Console.WriteLine("{0}", gigi);
Console.ReadLine();

一切正常,直到我更改区域选项。如果我选择意大利语:

在此处输入图像描述

这是输出:0,0013

在此处输入图像描述

如果我在区域选项中选择美国,则为 OUTPUT: 0.0000

在此处输入图像描述

我不知道如何解决这个问题。

提前致谢。

4

3 回答 3

3

decimal.Parse(string)使用当前系统格式;因此

decimal.Parse(resourceElementVincent.Elements("field")
       .Single(fieldElement => fieldElement.Attribute("name").Value == "age")
       .Value)

当 Vincent 的年龄设置为 0.27 并且当前文化是意大利语(其中NumberDecimalSeparator是逗号)时,将返回零。

但是,您可以改用该decimal.Parse(string, IFormatProvider)方法,传递InvariantCulture(其中 NumberDecimalSeparator 是句点):

decimal.Parse(resourceElementVincent.Elements("field")
       .Single(fieldElement => fieldElement.Attribute("name").Value == "age")
       .Value, CultureInfo.InvariantCulture);

MSDN 文档在这里

于 2013-01-24T21:57:07.960 回答
1

我的猜测是 1.00E+006 的解析取决于当前区域。

于 2013-01-24T21:42:27.403 回答
-1

这很正常!欧洲语言使用小数点作为逗号,反之亦然。如果您想始终如一地使用其中一种,您可以结合 String.Format 设置特定的文化,如下所示:

通过 CultureInfo 格式化字符串

于 2013-01-24T21:28:13.353 回答