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);