C# 选择不同的区域选项会改变c中数学运算的结果#

C# 选择不同的区域选项会改变c中数学运算的结果#,c#,globalization,decimal-point,regional-settings,C#,Globalization,Decimal Point,Regional Settings,我正在使用VisualStudio2010。我的代码有一个奇怪的行为 使用这段代码,我可以解析xml文件 XDocument document = XDocument.Load("http://www.studiovincent.net/list.xml"); XElement resourcesElement = document.Root.Element("resources"); XElement resourceElementVincent = (from resourceElement

我正在使用VisualStudio2010。我的代码有一个奇怪的行为

使用这段代码,我可以解析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();
在我更改区域选项之前,所有选项都正常工作。如果我选择意大利语:

这是输出:00013

如果我在区域选项中选择美国,这是输出:0.0000

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


提前谢谢。

这很正常!欧洲语言使用小数点作为逗号,反之亦然。如果要一致使用其中一种,可以结合String.Format设置特定区域性,如下所示:


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

十进制。解析(字符串)
使用当前系统格式;因此

decimal.Parse(resourceElementVincent.Elements("field")
       .Single(fieldElement => fieldElement.Attribute("name").Value == "age")
       .Value)
当Vincent的年龄设置为0.27且当前文化为意大利语(其中的是逗号)时,将返回零

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


MSDN文档。

好的,但我希望此代码适用于所有区域选项,我不理解,所以我需要添加它:(他的问题不是
,他实际上得到了不同的结果。你是否有意将其缩短为四个零?即,
0000
?可能是某个地方存在舍入问题,但由于允许输出的长度,它正在将其截断。请查看是否可以增加输出的长度,y。)您可能会发现以前未显示的“隐藏”值。如果是这种情况,请更改相应区域的输出解析方式。好的,谢谢您提供的信息,但我不明白如果我设置了意大利语,我会得到这个输出:00013,如果我设置了USA,我会得到这个结果:0.0000是否正确,1.00E+006取决于当前区域,谢谢
decimal.Parse(resourceElementVincent.Elements("field")
       .Single(fieldElement => fieldElement.Attribute("name").Value == "age")
       .Value, CultureInfo.InvariantCulture);