奇怪的浮动行为

tom*_*kid -1 c# floating-point

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

bool isActorValueSame = v1 == v2;       
Run Code Online (Sandbox Code Playgroud)

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

Jen*_*iya 5

因为propertyInfo.GetValue(blueprint);返回对象和对象是引用类型所以相等的运算符总是会让你错误.在比较前尝试铸造

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

bool isActorValueSame = v1 == v2; 
Run Code Online (Sandbox Code Playgroud)

看一看MSDN文档这里关于更详细的PropertyInfo.GetValue方法