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