2012-06-26 122 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