2012-06-22 4 views
2
NSLog(@"original float value = %f", [anNSNumber floatValue]); 

float newFloat = [anNSNumber floatValue] - 1.0f; 

NSLog(@"newFloat = %f", newFloat); 

дает мнеВычитая из CGFloat

Orginal значение с плавающей точкой = 215987480044765184,000000

newFloat = 215987480044765184,000000

Как вы просто вычитать 1 из float?

ответ

5

Нет, вы не можете упростить его дальше. Число с плавающей запятой отличается от целого.

Следует отметить, что тип float может содержать до 24 бит точности (около 6-7 десятичных цифр точности). Количество, которое у вас там, превышает точность, доступную для float, а сумма вычитания слишком мала, чтобы повлиять на 24-битную точность, поэтому операция просто не вносит никаких изменений в результат.

Проблема не устранена, даже если вы выполняете операцию в double, так как число даже превышает точность 53 бит для double.

В зависимости от вашего требования, может понадобиться 64-разрядный целочисленный тип (long long или int64_t). Если такая точность необходима для еще большего числа, базового типа будет недостаточно. Внешняя библиотека может понадобиться, если вам нужна очень высокая точность.

+0

Однажды я пойму, плавает. Спасибо, попробуем целые числа. – daidai

+0

Ах, ints, хотя и слишком малы. – daidai

+0

Итак, как вы делаете минус 1 из большого NSNumber? – daidai

0

Почему у вас есть на вашей третьей строке: NSLog (@ "newFloat =% f", idOfLastTweet); вместо NSLog (@ "newFloat =% f", newFloat); ?

+0

Изменено. Это для Twitter, но хотелось сделать пример более общим. – daidai

Смежные вопросы