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

Ram*_*sel 0 floating-point objective-c

我正在尝试调整帧数.我有两个常量定义为浮点数 - viewTotalHeightExpandedviewTotalHeight.我正在减去这两个differenceY.

  CGFloat differenceY = viewTotalHeightExpanded - viewTotalHeight;
  NSLog(@"viewTotalHeightExpanded = %f", viewTotalHeightExpanded);
  NSLog(@"viewTotalHeight = %f", viewTotalHeight);
  NSLog(@"differenceY = %f", differenceY);
Run Code Online (Sandbox Code Playgroud)

日志显示:

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
Run Code Online (Sandbox Code Playgroud)

为什么differenceY不是40?

编辑

这是怎么viewTotalHeightviewTotalHeightExpanded定义:

#define likeBarHeight 20.0f
#define viewTotalHeight likeBarY+likeBarHeight+sortBarHeight
Run Code Online (Sandbox Code Playgroud)

所有其他链式常量如likeBarYsortBarHeight被定义为类似的浮点数likeBarHeight.

dca*_*ell 5

这就是你正在做的事情:

CGFloat differenceY = viewTotalHeightExpanded - viewTotalHeight;
Run Code Online (Sandbox Code Playgroud)

因为viewTotalHeight像likeBarY + likeBarHeight + sortBarHeight转换为

CGFloat differenceY = viewTotalHeightExpanded -likeBarY+likeBarHeight+sortBarHeight
Run Code Online (Sandbox Code Playgroud)

试试这个:

 CGFloat differenceY = (viewTotalHeightExpanded) - (viewTotalHeight);
Run Code Online (Sandbox Code Playgroud)

或者甚至可以更好地使viewTotalHeight可以在没有括号的情况下重复使用

#define viewTotalHeight (likeBarY+likeBarHeight+sortBarHeight)
Run Code Online (Sandbox Code Playgroud)