2011-08-16 19 views
4

在我的程序這個片段:如何輸出精度足以顯示Debug和Release之間的算術差異的值?

trace.Log(
String.Format("a= {0:F10} b= {1:F10} a<b= {2}", 
    b.GetPixel(447, 517).GetBrightness(), (100F/255F), 
    b.GetPixel(447, 517).GetBrightness() < (100F/255F)) 
); 

輸出這在調試模式:

a= 0.3921569000 b= 0.3921569000 a<b= False 

但這種不同的結果在Release模式:

a= 0.3921569000 b= 0.3921569000 a<b= True 

之前,我尋求一種方式來獲得兩種模式之間的一致算術,我可以使用什麼代碼來顯示變量中的隱藏精度,這些變量可能包含導致這種差異的變化?謝謝。

回答

2

有一個standard numeric format string正是你在找什麼:"r"(「往返」)。它給了你一個足夠數字的字符串,以保證當你再次解析它時,它會重現你剛開始使用的相同位。

因此,而不是{0:F10},使用{0:r},你會得到所有可用的精度。

+0

只是門票!非常感謝喬。 「R」確實揭示了上述F10的「000」位置的精確度。你能向我解釋爲什麼F10給出了明顯錯誤的結果? – ChrisJJ

+0

假設你使用'double',實際上有15到16位的精度。用'f10',你明確地告訴它顯示十位小數。對於0.1到0.9之間的數字,這意味着只顯示10位精度。 –

+0

喬,那個例子使用float不是double。我所問的假結果是F10的0.3921569000,與R的0.392156869相比。我說假,因爲F10對R顯示的所有數字都是足夠的,但F10的輸出被路由到兩位數。 – ChrisJJ

相關問題