条件Double.TryParse(node.ChildNodes [4] .InnerText,当然)不起作用。它总是返回0.
foreach (XmlNode node in XmlDoc.SelectNodes("/ValCurs/Valute"))
{
if (node.ChildNodes[1].InnerText == curr_name) // CharCode
{
// throw new Exception(node.ChildNodes[4].InnerText); //returns 2.085 but the next condition doesn't work
if (Double.TryParse(node.ChildNodes[4].InnerText, out course)) // course value, nominal = 100
{
if (Int32.Parse(node.ChildNodes[2].InnerText) == 10) course *= 10; //for RUB, BYR nominal = 10
if (Int32.Parse(node.ChildNodes[2].InnerText) == 1000) course /= 10; //for JPY, HUF nominal = 1000
return course;
}
}
XML片段
<Valute id="1">
<NumCode>036</NumCode>
<CharCode>AUD</CharCode>
<Nominal>100</Nominal>
<Name>Australian dollars</Name>
<Value>1276.6300</Value>
</Valute>
答案 0 :(得分:0)
TryParse方法使用当前文化,因此数字格式可能因您的系统而异。
您可以使用TryParse的覆盖版本,将IFormatProvider作为参数传递。 CultureInfo.InvariantCulture使用。作为小数分隔符:
Double.TryParse(node.ChildNodes[4].InnerText, CultureInfo.InvariantCulture, out course)
顺便说一下。通过将它们作为异常抛出来检查值是一种相当有趣的方法,但我强烈建议调试/记录以检查发生了什么。