我有两个值,一个来自用户输入,另一个来自数据库。
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,为float。
所以1 / 0.001 = 1000
但是我的c#代码给了我999.999939;
var final = float.Parse(userinput) / valuefromDB
当我有“2”作为用户输入值时,结果是正确的,2000 ...
答案 0 :(得分:9)
那是因为并非所有十进制数都可以用二进制精确表示(the representation that float
uses)。解决方案是将结果格式化为所需的小数位数,这将导致它被舍入并因此“正确”显示。
更新要格式化float
进行展示,请查看this MSDN reference page和this page of examples。
答案 1 :(得分:1)
对于浮点数不提供的纯精度而是十进制。
请参阅What is the difference between Decimal, Float and Double in C#?