Вычитание из 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 ответа:
Нет, дальше упрощать нельзя. Число с плавающей запятой отличается от целого числа.
Еще следует отметить, что типfloat
может содержать только до 24 бит точности (около 6-7 десятичных разрядов точности). Число, которое вы там имеете, превышает точность, доступную дляfloat
, а сумма вычитания слишком мала, чтобы повлиять на 24-битную точность, поэтому операция просто не вносит никаких изменений в результат.Проблема не решена, даже если вы выполните операцию в
double
, так как число даже превышает 53-битную точность дляdouble
.В зависимости от ваших требований, 64-битный целочисленный тип (
long long
тип, или более конкретныйint64_t
) может быть тем, что вам нужно. Если такая точность необходима для еще большего числа, то базового типа будет недостаточно. Внешняя библиотека может понадобиться, если вам нужна очень высокая точность.