奇怪的浮动行为

时间:2015-03-03 07:08:42

标签: c# floating-point

var v1 = propertyInfo.GetValue(actor);
var v2 = propertyInfo.GetValue(blueprint);

bool isActorValueSame = v1 == v2;       

每当我尝试比较v1和v2时 - 即使v1和v2都等于500.0f,我也会收到错误的布尔值。任何想法为什么会这样?我知道比较两个浮点数是不安全的,因为浮点不准确,但我的值都是100%相等。

2 个答案:

答案 0 :(得分:5)

因为propertyInfo.GetValue(blueprint);将返回对象,而对象是引用类型,所以相等的运算符总是会让你失误。 在比较前尝试施放

var v1 = (float)propertyInfo.GetValue(actor);
var v2 = (float)propertyInfo.GetValue(blueprint);

bool isActorValueSame = v1 == v2; 

有关PropertyInfo.GetValue方法

的更多详细信息,请查看MSDN文档here

答案 1 :(得分:0)

由Jenish写的......附录:

var v1 = propertyInfo.GetValue(actor);
var v2 = propertyInfo.GetValue(blueprint);

bool isActorValueSame = v1.Equals(v2);

这样可行,因为Object.Equals

  

对于值类型,相等性定义为按位相等