我正在使用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
我不知道如何解决这个问题。
提前致谢。
答案 0 :(得分: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文档here。
答案 1 :(得分:1)
我的猜测是1.00E + 006的解析取决于当前区域。
答案 2 :(得分:-1)
这很正常!欧洲语言使用小数点作为逗号,反之亦然。如果要一致地使用其中一个,可以将String.Format与特定文化一起设置,如下所示: