Objective c 减去定义为常量的两个浮点时出现意外结果
我正在调整帧。我有两个常量定义为float-Objective c 减去定义为常量的两个浮点时出现意外结果,objective-c,floating-point,Objective C,Floating Point,我正在调整帧。我有两个常量定义为float-viewTotalHeightExpanded和viewTotalHeight。我将二者相减得到差分y CGFloat differenceY = viewTotalHeightExpanded - viewTotalHeight; NSLog(@"viewTotalHeightExpanded = %f", viewTotalHeightExpanded); NSLog(@"viewTotalHeight = %f", viewTotal
viewTotalHeightExpanded
和viewTotalHeight
。我将二者相减得到差分y
CGFloat differenceY = viewTotalHeightExpanded - viewTotalHeight;
NSLog(@"viewTotalHeightExpanded = %f", viewTotalHeightExpanded);
NSLog(@"viewTotalHeight = %f", viewTotalHeight);
NSLog(@"differenceY = %f", differenceY);
日志显示:
2013-08-24 12:30:48.305 WS[25737:c07] viewTotalHeightExpanded = 406.000000
2013-08-24 12:30:48.305 WS[25737:c07] viewTotalHeight = 366.000000
2013-08-24 12:30:48.306 WS[25737:c07] differenceY = 680.000000
为什么differenceY
不是40
编辑
这就是viewTotalHeight
和viewTotalHeightExpanded
的定义:
#define likeBarHeight 20.0f
#define viewTotalHeight likeBarY+likeBarHeight+sortBarHeight
所有其他链式常量,如
likeBarY
和sortBarHeight
被定义为类似于likeBarHeight
的浮动 这就是您正在做的:
CGFloat differenceY = viewTotalHeightExpanded - viewTotalHeight;
这是因为viewTotalHeight类似于BARY+likeBarHeight+sortBarHeight转换为
CGFloat differenceY = viewTotalHeightExpanded -likeBarY+likeBarHeight+sortBarHeight
所以试试这个:
CGFloat differenceY = (viewTotalHeightExpanded) - (viewTotalHeight);
或者,让viewTotalHeight在不使用括号的情况下可重用可能更好
#define viewTotalHeight (likeBarY+likeBarHeight+sortBarHeight)
这就是你正在做的:
CGFloat differenceY = viewTotalHeightExpanded - viewTotalHeight;
这是因为viewTotalHeight类似于BARY+likeBarHeight+sortBarHeight转换为
CGFloat differenceY = viewTotalHeightExpanded -likeBarY+likeBarHeight+sortBarHeight
所以试试这个:
CGFloat differenceY = (viewTotalHeightExpanded) - (viewTotalHeight);
或者,让viewTotalHeight在不使用括号的情况下可重用可能更好
#define viewTotalHeight (likeBarY+likeBarHeight+sortBarHeight)
viewTotalHeightExpanded和viewTotalHeightExpanded是否都是
CGFloat
?@RobNapier I包含上述代码。它们被定义为常规浮点,我想知道转换为cgloats是否有问题,但我不这么认为,因为日志显示了它们的值。viewTotalHeightExpanded和viewTotalHeight是否都cgloat
?@RobNapier我包含了上面的代码。它们被定义为常规浮点,我想知道转换为CGfloat是否是个问题,但我不这么认为,因为日志显示了它们的值。现在这很有意义。谢谢。或者只使用一个常量而不是定义。当包含预处理器时,会产生许多不必要的复杂情况。@RobNapier+1使用#define会引入bug,使它们很难找到。程序员看到的代码不是编译器主体看到的代码。现在这就很有意义了。谢谢。或者只使用一个常量而不是定义。当包含预处理器时,会产生许多不必要的复杂情况。@RobNapier+1使用#define会引入bug,使它们很难找到。程序员看到的代码不是编译器主体看到的代码。