Float равен 0 после целочисленного деления

Это может быть простое решение, но я не могу это исправить.

Я делю 2 целых числа:

finishedGameFinalScore = [score integerValue];
CGFloat interval = 2/finishedGameFinalScore;
NSLog(@"interval = %f",interval);

Журнал возвращается 0.000000

Есть ли предел для десятичных знаков? Мне нужно сохранить десятичный результат.

Спасибо Шани

4 ответа

Решение

Причина, по которой ваш код не работает, состоит в том, что вы делите целое число на другое целое, а затем приводите результат к числу с плавающей точкой.

Таким образом, у вас есть 2 (целое число) и некоторое другое число (также целое число). Затем вы делите 2 на это число, которое, вероятно, больше 2. Скажем, это 3.

Integer видит 2/3, и он как "0.66666667? Тссс, никому никогда не нужно ничего после десятичной запятой в любом случае". Поэтому он обрезает это. У тебя просто 0.

затем Integer дает номер г-ну float и мистер float очень рад получить номер! Он все как "да, 0! Я собираюсь добавить ВСЕ ЗНАЧИТЕЛЬНЫЕ ЦИФРЫ". И вот как вы получите 0,0000000.

Так что да, просто бросить в поплавок первым. Или даже двойной!

@Дастин сказал, что вам нужно будет ввести значение делителя, чтобы оно с плавающей точкой показывало целое значение

СЛУЧАЙ 1: Typecast

NSString *score = @"3";
 int interval = [str intValue];
 CGFloat interval = (2/(float)interval);
 NSLog(@"interval = %.2f",interval);

СЛУЧАЙ 2: Нет необходимости в Typecast

NSString *score = @"3";
 float interval = [str floatValue];
 CGFloat interval = (2/interval);
 NSLog(@"interval = %.2f",interval);

Просто добавьте f-подсказку к цифре 2. В этом случае это поможет.

CGFloat interval = 2.0f/finishedGameFinalScore;

Все приведенные выше / ниже ответы являются правильными и полностью объясняют, почему эта работа.

Просто делим длинное значение с 1.0 и присваиваем переменной типа float.

unsigned long l1 = 65536;
unsigned long l2 = 256;
float f = (l1/1.0)/(l2/1.0);

NSLog(@"%f",f);
Другие вопросы по тегам