iT邦幫忙

0

不是一個數字 C#

c#
using (FileStream W_FileStream =
                              new FileStream(
                                  String.Format("{0}{1}Save_statistics.txt", Path.Combine(Application.StartupPath, "Data"), Path.DirectorySeparatorChar),
                                  FileMode.Create,
                                  FileAccess.Write,
                                  FileShare.None))
                            {
                                using (StreamWriter _StreamWriter = new StreamWriter(W_FileStream, Encoding.UTF8))
                                {
                                    //_StreamWriter.Write(Decimal.Parse(Convert.ToString(xSquare_statistics)).ToString("0.000000000000"));
                                    _StreamWriter.Write(xSquare_statistics);
                                }
                            }

計算數值存入 Save_statistics.txt時這個txt檔只會存入"不是一個數字"
也有強制轉型也是一樣
程式碼下面還有一個 Save_critical.txt就很正常有數據進入

P.S.整個的程式碼:
http://xun6.com/file/8bacb8f26/Similarity.cs.html

1 個回答

12
lordrd
iT邦新手 2 級 ‧ 2010-11-06 20:30:57
最佳解答

你要不要試試看把
_StreamWriter.Write(xSquare_statistics);
改成
_StreamWriter.Write( xSquare_statistics.ToString("G") );

看更多先前的回應...收起先前的回應...
sacc2133 iT邦新手 5 級 ‧ 2010-11-06 20:43:55 檢舉

還是一樣耶!!
是不是超位呀!!
xSquare_critical算出來的東西是小數點12~13位的數值

lordrd iT邦新手 2 級 ‧ 2010-11-06 23:09:29 檢舉

你要不要 debug 把中斷點設在這兒
StreamWriter.Write (... )
看 進行 Write 時 xSquare_statistics 的值是甚麼

lordrd iT邦新手 2 級 ‧ 2010-11-06 23:11:12 檢舉

另外...
你可以先把
StreamWriter _StreamWriter = new StreamWriter(W_FileStream, Encoding.UTF8);
改成
StreamWriter _StreamWriter = new StreamWriter(W_FileStream);
試試看~

sacc2133 iT邦新手 5 級 ‧ 2010-11-07 10:37:25 檢舉

我發現 上面xSquare_statistics算出來是"0.0" 沒有值

sacc2133 iT邦新手 5 級 ‧ 2010-11-07 19:57:49 檢舉

all_total = c_total[0] + c_total[1]; 這而是有值的

<pre class="c" name="code">while (ab_Flag != a_count_E.Count && ab_Flag != a_all_term.Count)
                            {
                                xSquare_ab[0] = ((Math.Pow((a_all_term[ab_Flag] - a_count_E[ab_Flag]), 2)) / a_count_E[ab_Flag]) + xSquare_ab[0];
                                ab_Flag += 1;
                            }
                            while (ab_Flag != b_count_E.Count && ab_Flag != b_all_term.Count)
                            {
                                xSquare_ab[1] = ((Math.Pow((b_all_term[ab_Flag] - b_count_E[ab_Flag]), 2)) / b_count_E[ab_Flag]) + xSquare_ab[1];
                                ab_Flag += 1;
                            }

xSquare_ab[0] xSquare_ab[1] 一個是NaN 一個是0.0

lordrd iT邦新手 2 級 ‧ 2010-11-07 21:46:55 檢舉

那就是你的運算出了問題了 !
你 debug 你貼的這部分
看為什麼運算會出錯

sacc2133 iT邦新手 5 級 ‧ 2010-11-08 20:53:03 檢舉

我中斷尋了一遍
//X統計值
Int32 ab_Flag = 0;
以上的數值結果都有出來而且都正確!!

lordrd iT邦新手 2 級 ‧ 2010-11-09 03:58:51 檢舉

sacc2133提到:
xSquare_ab[0] xSquare_ab[1] 一個是NaN 一個是0.0

我是說 你要去查 為什麼 一個是 NaN 一個是 0.0 ...
是甚麼原因導致 NaN !!!
因為你的程式在運算的時候 除法有用0去除 所以變成 NaN

Nan : The value of this constant is the result of dividing zero by zero.

sacc2133 iT邦新手 5 級 ‧ 2010-11-09 19:48:48 檢舉

我找到了 在新增 a_all_term b_all_term 這兩個List時
沒有弄好 導致某些[i]跑出 a_all_term[6]=0.0 ,b_all_term[6]=0.0
這兩個List最多只能有一個為"0.0"

我要發表回答

立即登入回答