奇怪的浮动行为

Strange float behavior

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

bool isActorValueSame = v1 == v2;       

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

因为 propertyInfo.GetValue(blueprint); 将 return 对象,并且对象是引用类型,所以等于运算符总是会让你出错。 比较前尝试投射

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

bool isActorValueSame = v1 == v2; 

查看 MSDN 文档 here 了解有关 PropertyInfo.GetValue 方法的更多详细信息

如 Jenish 所写... 附录:

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

bool isActorValueSame = v1.Equals(v2);

这会起作用,因为 Object.Equals:

For value types, equality is defined as bitwise equality