目标C中的奇怪数学

Ric*_*ard 2 objective-c

我在Objective C中通过简单的数学计算得到了一个意想不到的值.我输出了计算的三个不同部分以及下面的计算结果.

以下代码

    NSLog(@"self.contentView.bounds.size.width: %f", self.contentView.bounds.size.width);
    NSLog(@"SWATCHES_WIDTH: %f", SWATCHES_WIDTH);
    NSLog(@"RIGHT_MARGIN: %f", RIGHT_MARGIN);
    NSLog(@"(self.contentView.bounds.size.width - SWATCHES_WIDTH - RIGHT_MARGIN): %f", (self.contentView.bounds.size.width - SWATCHES_WIDTH - RIGHT_MARGIN));
Run Code Online (Sandbox Code Playgroud)

给出以下输出:

self.contentView.bounds.size.width:288.000000
SWATCHES_WIDTH:82.000000
RIGHT_MARGIN:12.000000
(self.contentView.bounds.size.width - SWATCHES_WIDTH - RIGHT_MARGIN):214.000000

我希望结果将是194而不是214(288-82-12 = 194).任何人都可以提供任何见解,为什么这是按照它的方式计算,我可以做些什么来解决它?谢谢!

据我所知,这三个值都是CGFloats.这两个常量定义如下:

#define SWATCHES_WIDTH      SWATCH_SIZE * 3.0 + SPACE_BETWEEN * 2.0
#define RIGHT_MARGIN        12.0
Run Code Online (Sandbox Code Playgroud)

Joh*_*ica 7

这个:

self.contentView.bounds.size.width - SWATCHES_WIDTH - RIGHT_MARGIN
Run Code Online (Sandbox Code Playgroud)

正在扩展到这个:

self.contentView.bounds.size.width - SWATCH_SIZE * 3.0 + SPACE_BETWEEN * 2.0 - RIGHT_MARGIN
Run Code Online (Sandbox Code Playgroud)

你真正想要的是:

self.contentView.bounds.size.width - SWATCH_SIZE * 3.0 - SPACE_BETWEEN * 2.0 - RIGHT_MARGIN
self.contentView.bounds.size.width - (SWATCH_SIZE * 3.0 + SPACE_BETWEEN * 2.0) - RIGHT_MARGIN
Run Code Online (Sandbox Code Playgroud)

您需要在其周围添加括号,以便正确扩展:

#define SWATCHES_WIDTH  (SWATCH_SIZE * 3.0 + SPACE_BETWEEN * 2.0)
Run Code Online (Sandbox Code Playgroud)