2012-06-26 50 views
2

我有兩個值,一個來自用戶輸入,另一個來自DB。Float/Float =奇怪的結果

var userinput = form["someInput"]; 
var valuefromDB = GetValue(someNumber); 

public float? GetValue(int id){ 
return (float?) db.table.where(p=> p.id == id).select(p=> p.Value).SingleOrDefault(); 
} 

userinput的值爲字符串「1」,而valuefromDB的值爲0.001浮點值。

所以1/0.001 = 1000

但我的C#代碼給我999.999939作爲結果;

var final = float.Parse(userinput)/valuefromDB 

當我有「2」作爲用戶輸入值,結果是正確的,2000 ...

+3

這是float精度的結果。 – Candide

+6

每個程序員都應該理解浮點數:http://en.wikipedia.org/wiki/Floating_point#IEEE_754:_floating_point_in_modern_computers – mellamokb

+0

你需要10點精度還是需要2點精度? –

回答

9

這是因爲不是所有的十進制數可以精確地以二進制表示(這是the representation that float uses)。解決方法是將結果格式化爲所需的小數位數,這將導致它被四捨五入並顯示爲「正確」。

更新:爲了格式化顯示一個float,看看this MSDN reference pagethis page of examples

+0

你可以給我簡單的c#示例嗎? :) –

+0

@NovkovskiStevoBato:更新了答案。 – Jon