Вычитание из CGFloat


NSLog(@"original float value = %f", [anNSNumber floatValue]);

float newFloat = [anNSNumber floatValue] - 1.0f;

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

Дает мне

Исходное значение поплавка = 215987480044765184.000000

NewFloat = 215987480044765184.000000

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

2 2

2 ответа:

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

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

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

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

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