2016-12-01 1 views
1

私はHtmlAgilityPackを使用して、以下のようにさまざまなWebサイトから情報を取得しています。 fhfaRate = "3.62"はデバッグ中ですが、isNumfalsemyRate = 0.0です。 TryParse"3.62"と入力しても問題ありませんが、(デバッグ時)の値をコピーしてTryParseに貼り付けた場合、このように見えるにもかかわらずfalseが返されます。Webページから取得した数値を変換するときにDecimal.TryParseがfalseを返すのはなぜですか?

"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); 
+3

ブレークポイントのヒントを設定するには、ウォッチウィンドウで 'fhfaRate.ToCharArray()'を見てください。そこには目に見えない文字があるかもしれません。 'System.Globalization.CultureInfo.CurrentCulture'の値も調べてください。 –

+2

本当に "3.62"の文字が入っているのですか? –

+1

また、デバッグ時に 'string.Join(" "、fhfaRate.Select(c =>(int)c).ToString(" x4 "))デバッグ時に文字列をデコードしようとすると、結果は" 0033 002e 0036 0032 " ( '' 3.62 "'の場合) –

答えて

1

お役に立てる方に感謝します。文字列のためにCharArrayにゼロ幅スペース(8203)が付加されていたことが判明しました。私は、最初の4文字とボイルラのサブ文字列を使用した、私は小数点以下の値を持っています。

私はそれをやった後に考えました。もし値が2桁になると、それは壊れてしまうので、私は周りを見回し、代わりにこれを見つけました。

InnerText.Replace((char)0x200B, ' '); 
+0

ゼロスペース文字は実際には意味があります。 trim関数は文字の配列も受け入れますので、次のように使用できます: 'InnerText.Trim(new char [] {'\ x2009'、 '\ x200B'})' – martinstoeckli

関連する問題