Правильно ли использовать значение типа float для int? - PullRequest
2 голосов
/ 02 апреля 2012

Я использую этот код, чтобы попытаться преобразовать число с плавающей точкой в ​​int, а затем использовать его для текста UILabel:

[progLabel setText:[NSString stringWithFormat:@"Deck Progress %i%%",progBar.progress*100]];

и я пробовал это:

[progLabel setText:[NSString stringWithFormat:@"Deck Progress %i%%",(int)progBar.progress*100]];

Отображаемый текст всегда "0%".

Я также попробовал это, которое работает:

int pval=progBar.progress*100;
[progLabel setText:[NSString stringWithFormat:@"Deck Progress %i%%",pval]];

Я пробовал% f %%, но это дает мне слишком много цифр - я пытаюсь получить только 0-100 без десятичных разрядов.

Что я делаю не так?

Ответы [ 2 ]

3 голосов
/ 02 апреля 2012

(int) применяется только к progBar.progress, потому что приведение имеет более высокий приоритет, чем умножение, и (int)progBar.progress всегда равно 0, если 0 ≤ progBar.progress <1. Вам необходимо привести все выражение как </p>

(int)(progBar.progress * 100)

В качестве альтернативы, вы можете вообще избежать приведения, используя формат с плавающей запятой, который не показывает дробную часть.

[NSString stringWithFormat:@"Deck progress %.0f%%", progBar.progress * 100]
1 голос
/ 02 апреля 2012

Отображаемый текст всегда "0%".

Это потому, что вы не разыгрываете с плавающей точкой на целое число: вы передаете число с плавающей точкойничего не подозревающая функция ожидание целого числа.Вы должны добавить приведение:

[progLabel setText:[NSString stringWithFormat:@"Deck Progress %i%%",(int)(progBar.progress*100)]];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...