2010-08-16 59 views
2

我在做一些單元測試工作,併爲其中一個斷言彈出一個特殊的錯誤。請注意expectedValue和actualValue都是雙打。C#.Net雙重問題... 6.8!= 6.8?

Assert.AreEqual(expectedValue, actualValue); 

異常表示,他們不相等,闡述的是 「預期值:< 6.8>實際值:< 6.8>」。

預期值是硬編碼6.8和實際值是使用數據庫值通過我們的分類方法(如相等的記錄,或詹克斯自然中斷的)去制定。

我的猜測是,所不同的是可能是2個值的尾數,直到至少顯著幾分相似了。我更新了測試,以包含一個epsilon來查找這兩個值是否足夠接近,但我很好奇,是否有辦法強制尾數與顯示值相匹配,如果我顯示雙倍。這樣的尾數改正是否存在?

+0

人們無法正確讀取你的問題,你知道是怎麼回事配合精度,你是隻是詢問尾數處理問題的更好,對吧? – 2010-08-16 17:11:39

+0

我在尋求一種可能的方式來重構mantisa,以便它保持一個更接近它所顯示的值。有點像val = double.Parse(val.ToString());或許更有效。 – 2010-08-16 19:13:06

回答

3

我不完全確定你的意思是通過強制尾數來匹配顯示值......有沒有雙精度值,例如恰好爲0.1。

如果你想一些代碼來顯示的雙,但是,我有一個DoubleConverter.cs文件,這使得它容易確切值:

double d = 0.1; 
string x = DoubleConverter.ToExactString(d); 

另一種方法是使用往返格式說明(「r」)將double轉換爲字符串 - 保證結果具有足夠的信息以稍後再現相同的確切值。換句話說,如果x != y,那麼x.ToString("r") != y.ToString("r")

+0

我的意思是我有兩個不同的值,都在Visual Studio中顯示爲6.8,但它們的確切表示方式不同。我如何弄清楚哪一個更爲正確(如果甚至可能的話)並且讓它們都以這種方式表示,那麼平等檢查就會成爲現實? – 2010-08-16 16:42:48

1

您可以將兩者都轉換爲字符串:actualValue.ToString("0.000")並比較這些字符串。

可以使之與您的要求緊密匹配。

0

如果你想測試是否默認顯示值一致,只是比較默認的顯示值:

Assert.AreEqual(expectedValue.ToString(), actualValue.ToString());