Objective c 减去定义为常量的两个浮点时出现意外结果

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

我正在调整帧。我有两个常量定义为float-
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,使它们很难找到。程序员看到的代码不是编译器主体看到的代码。