2013-11-13 1 views
0
NSTimeInterval expirationTime = (secondsSinceUnixEpoch*1000)+120000; 
expirationTime = ceil(expirationTime/2); 
int expirationInt = (int)expirationTime; 
NSLog(@"%d", expirationInt); 

Выход журнала всегда отрицательный, хотя до того, как преобразовать его в int, это положительно ... Я попытался просто умножить его на -1, чтобы сделать его положительным снова, и он просто останется отрицательным! Я полностью озадачен .... не знаю много о C, я просто делаю что-то глупое?Почему преобразование моего float в int делает число отрицательным?

+2

Вы считаете переполнение? – CRD

+2

Почему вы конвертируете его в 'int'? Почему бы не сохранить его как 'NSTimeInterval' (' double')? – rmaddy

+0

Попробуйте использовать 'long' или' long long', если вам действительно нужен интегральный тип. – rmaddy

ответ

4

Число (secondsSinceUnixEpoch*1000)+120000 выглядит так, как будто оно слишком велико, чтобы соответствовать int. Шансы на то, что целое число переполнено и становится отрицательным.

+0

Вы были правы, я долго пользовался, и теперь это работает. :) –

1

Преобразование в long long - одно решение. Как вы отметили в комментарии, вы хотите показать целое число для использования в URL-адресе. Просто выполните это:

NSTimeInterval expirationTime = (secondsSinceUnixEpoch*1000)+120000; 
expirationTime = ceil(expirationTime/2); 
NSString *urlString = [NSString stringWithFormat:@"http://example.com?time=%.0f", expirationTime]; 

Это будет отформатировать десятичное число как целое число.

+0

Так просто! Кент Бек «Сделайте самую простую вещь, которая могла бы работать» – zaph