Странная математика в Задаче C - PullRequest
2 голосов
/ 28 октября 2009

Я получаю неожиданное значение с помощью простого математического вычисления в Задаче 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));

дает следующий вывод:

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

Ответы [ 2 ]

7 голосов
/ 28 октября 2009

Это:

self.contentView.bounds.size.width - SWATCHES_WIDTH - RIGHT_MARGIN

расширяется до этого:

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
self.contentView.bounds.size.width - (SWATCH_SIZE * 3.0 + SPACE_BETWEEN * 2.0) - RIGHT_MARGIN

Вам нужно добавить круглые скобки вокруг него, чтобы он правильно раскрылся:

#define SWATCHES_WIDTH  (SWATCH_SIZE * 3.0 + SPACE_BETWEEN * 2.0)
1 голос
/ 28 октября 2009

Снова удар CPP!

Ваше вычитание после запуска cpp идет из этого:

(self.contentView.bounds.size.width - SWATCHES_WIDTH - RIGHT_MARGIN)

к этому:

(self.contentView.bounds.size.width - SWATCH_SIZE * 3.0 + SPACE_BETWEEN * 2.0 - 12.0)

Видите проблему?

Вы хотите, чтобы SWATCHES_WIDTH расширился, добавив к нему скобки, чтобы вы получили то, что ожидали, то есть

(self.contentView.bounds.size.width - (SWATCH_SIZE * 3.0 + SPACE_BETWEEN * 2.0) - 12.0)

Таким образом, вы вычитаете, а не добавляете SPACE_BETWEEN*2.0 к вашему результату.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...