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
你要不要試試看把
_StreamWriter.Write(xSquare_statistics);
改成
_StreamWriter.Write( xSquare_statistics.ToString("G") );
還是一樣耶!!
是不是超位呀!!
xSquare_critical算出來的東西是小數點12~13位的數值
你要不要 debug 把中斷點設在這兒
StreamWriter.Write (... )
看 進行 Write 時 xSquare_statistics 的值是甚麼
另外...
你可以先把
StreamWriter _StreamWriter = new StreamWriter(W_FileStream, Encoding.UTF8);
改成
StreamWriter _StreamWriter = new StreamWriter(W_FileStream);
試試看~
我發現 上面xSquare_statistics算出來是"0.0" 沒有值
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
那就是你的運算出了問題了 !
你 debug 你貼的這部分
看為什麼運算會出錯
我中斷尋了一遍
//X統計值
Int32 ab_Flag = 0;
以上的數值結果都有出來而且都正確!!
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.
我找到了 在新增 a_all_term b_all_term 這兩個List時
沒有弄好 導致某些[i]跑出 a_all_term[6]=0.0 ,b_all_term[6]=0.0
這兩個List最多只能有一個為"0.0"