Float равен 0 после целочисленного деления
Это может быть простое решение, но я не могу это исправить.
Я деля 2 целых числа:
finishedGameFinalScore = [score integerValue];
CGFloat interval = 2/finishedGameFinalScore;
NSLog(@"interval = %f",interval);
Журнал возвращает 0.000000
Есть ли предел для десятичных знаков? Мне нужно сохранить десятичный результат.
Спасибо
Шани
Ответы
Ответ 1
Причина, по которой ваш код не работает, заключается в том, что вы делите целое число на другое целое число, а затем накладываете результат на float.
Итак, у вас есть 2 (целое число) и некоторое другое число (также целое число). Затем вы делите 2 на это число, которое, вероятно, больше 2. Скажем, 3.
Integer
видит 2/3, и ему нравится "0.66666667? Pshh, в любом случае, после десятичной точки никто не нуждается". Поэтому он усекает его. У вас всего 0.
Затем Integer
дает номер мистеру float
, а Mr float
очень рад получить номер! Он все вроде "yay, 0! Я собираюсь добавить ВСЕ ЗНАЧИТЕЛЬНЫЕ ЦИФРЫ". И то, как вы в конечном итоге с 0.0000000.
Итак, да, просто брось сначала на поплавок. Или даже двойной!
![enter image description here]()
Ответ 2
@ Dustin сказал, что u вам понадобится typecast ваше значение divider для float, поскольку оно идет в float, оно показывает целочисленное значение
CASE 1: Typecast
NSString *score = @"3";
int interval = [str intValue];
CGFloat interval = (2/(float)interval);
NSLog(@"interval = %.2f",interval);
CASE 2: нет необходимости в типе
NSString *score = @"3";
float interval = [str floatValue];
CGFloat interval = (2/interval);
NSLog(@"interval = %.2f",interval);
Ответ 3
Просто добавьте f-подсказку к номеру 2. в этом случае это сделает трюк.
CGFloat interval = 2.0f/finishedGameFinalScore;
все приведенные выше/ниже ответы правильны и полностью объясняют, почему эта работа.
Ответ 4
просто делить длинное значение от 1.0 и присваивать переменной float.
unsigned long l1 = 65536;
unsigned long l2 = 256;
float f = (l1/1.0)/(l2/1.0);
NSLog(@"%f",f);