C# 选择不同的区域选项会改变c中数学运算的结果#
我正在使用VisualStudio2010。我的代码有一个奇怪的行为 使用这段代码,我可以解析xml文件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
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);