float multiply float problem

I have 2 float number, one is 1f, the other is 1.55f, but the product of them is 1.05f !!! what’s wrong with it?

here’s my code:

float heightByHeight = bizObj.Space.Size.y / 2;
float heightByWidth = bizObj.Space.Size.x / camera.aspect / 2;
//Debug.Log("heightByHeight:" + heightByHeight + ",heightByWidth:" + heightByWidth);
 float size;
if (heightByHeight > heightByWidth)
{
        size = heightByHeight * viewObjectRatio;
}
else
{
        size = heightByWidth * viewObjectRatio;
}

Here’s the result in watch (on debugging)
101838-float-multiply-float-result.png

And i quite sure that the program runs by the first branch:
101840-float-multiply-float-branch.png

Obviously, the correct result should be “1.55f”, but “1.05f”, such a large difference could not be caused by precision. But why?

Debug stops at the start of the line. size has not been updated yet.
fwiw in situations like that i usually just throw in the line int stop = 1; after it and put the breakpoint on it.

Well, i find the problem.

I defined a member variable name viewObjectRatio, and intended to override it in a subclass. But there’s no override keyword on variable in C#, so i used “new”, thought it playing like “override”, obviousely, it’s wrong.

101858-viewbizobject.png

101859-viewrack.png

now i change the code as following:

public class ViewRack : ViewBizObject
{
        protected GameObject ruler;

        public ViewRack(BizObject biz) :base(biz)
        {
            viewObjectRatio = 1.05f;
        }
}

Then get the right result.

It’s my fault, but i have an execuse :slight_smile: misdirected by Visual Studio, it’s watching view gave a value from subclass, which not used in running context.