直接比较.net中的浮点数(double,float)是否相等是不安全的.变量中的double值可能会随着时间的推移而变化很小.例如,如果将变量num(double)设置为对象的0.2,则在该对象在内存中等待一段时间后,您可能会发现num变为0.1999999999999.因此,在这种情况下,num == 0.2将为false.我对此问题的解决方案是创建一个属性来舍入数字:
double Num
{
get{ return Math.Round(num, 1); }
}
Run Code Online (Sandbox Code Playgroud)
调用Num的get并返回结果后,在比较时(Num == 0.2),这个返回的数字是否会再次变为0.19?它不太可能但是有保证吗?
有没有办法在Converter类的Convert方法中获取源对象.我知道如何获得转换后的属性但是可以获取属性所属的对象吗?
double c, d, e;
double a = (c - d) / e;
double b = Math.Floor(a);
Debug.WriteLine(a.ToString() + " " + b.ToString());
Run Code Online (Sandbox Code Playgroud)
上面的代码在一个配置中输出"3 2",其中所有数字都是双倍的.这怎么可能?是因为双重操作导致的分数误差?但是我认为a.ToString()应该用整数来表示整数.