C# 为什么在转换从网页检索的数字时Decimal.TryParse返回false?
我正在使用HtmlAgilityPack从各种网站检索信息,如下所示C# 为什么在转换从网页检索的数字时Decimal.TryParse返回false?,c#,decimal,html-agility-pack,C#,Decimal,Html Agility Pack,我正在使用HtmlAgilityPack从各种网站检索信息,如下所示fhfaRate=“3.62”处于调试状态,但isNum为false和myRate=0.0。 我在TryParse中键入“3.62”,效果很好,但如果我从fhfaRate(在调试中)复制值并粘贴到TryParse,则返回false,尽管看起来像这样-“3.62” 这就像是“3.62”“3.62”,我被难住了 doc = web.Load(fhfaUrl); string fhfaRate = doc.DocumentNode.S
fhfaRate=“3.62”
处于调试状态,但isNum
为false
和myRate=0.0
。
我在TryParse
中键入“3.62”
,效果很好,但如果我从fhfaRate
(在调试中)复制值并粘贴到TryParse
,则返回false
,尽管看起来像这样-“3.62”
这就像是“3.62”“3.62”
,我被难住了
doc = web.Load(fhfaUrl);
string fhfaRate = doc.DocumentNode.SelectSingleNode("//td[@class='tg-s6z2 ms-rteTableEvenCol-4']/p").InnerText;
decimal myRate;
bool isNum = Decimal.TryParse(fhfaRate, NumberStyles.Any, CultureInfo.InvariantCulture, out myRate);
感谢那些帮助过我的人。原来字符串的
CharArray
中追加了一个零宽度空格(8203)。我使用了一个子字符串作为前4个字符,瞧,我有一个十进制值
在我这样做之后,我开始思考——如果值变为2位,它就会断开,所以我环顾四周,发现了这个
InnerText.Replace((char)0x200B, ' ');
在该行上设置一个断点,当断点提示时,查看“监视”窗口中的
fhfaRate.tocharray()
。里面可能有一个看不见的角色。还要检查System.Globalization.CultureInfo.CurrentCulture
的值。它真的只包含“3.62”的字符还是字符数组包含更多字符?或者尝试在调试string.Join(“”,fhfaRate.Select(c=>((int)c).ToString(“x4”)
结果应该是“0033002e 0036 0032”
(对于“3.62”
)谢谢,谢谢,谢谢!其中隐藏了第五个字符,8203,零宽度空格。我使用子字符串捕捉前4个字符,但也许有更好的方法?@Doug,用你的最新发现更新问题,这样人们就可以在不阅读所有评论的情况下回答它;)如果没有人会回答,稍后你可以发布自己的答案。零空格字符真的很刻薄。trim函数还接受一个字符数组,因此您可以这样使用它:InnerText.trim(新字符[]{'\x2009','\x200B'})