Как округлить значение CGFloat


person lifemoveson    schedule 11.07.2011    source источник


Ответы (3)


Попробуй это........

NSLog(@"SCALE : %.3f", scale);
NSString *value = [NSString stringWithFormat:@"%.3f", theFloat];

Украдено из Предыдущий ответ SO

person Aravindhan    schedule 11.07.2011
comment
Спасибо. Но как я могу преобразовать округление в это: CGFloat scale = CGContextGetCTM(context).a; - person lifemoveson; 11.07.2011
comment
попробуйте NSLog(@SCALE: %.3fg,scale); - person Aravindhan; 11.07.2011
comment
У меня сейчас нет Mac .. поэтому я не могу точно ответить :( - person Aravindhan; 11.07.2011
comment
когда я делаю NSLog(@SCALE : %.3f, масштаб); это дает мне правильный вывод. Но я хочу использовать масштаб на будущее, а не только для его отображения. - person lifemoveson; 11.07.2011
comment
@lifemoveson: Если вы не получили желаемого результата, не отмечайте это как принятый ответ. Только тогда вы сможете получить правильный ответ от других пользователей. - person Aravindhan; 11.07.2011
comment
см. обновленный ответ сейчас ...... - person Aravindhan; 11.07.2011
comment
Спасибо. На самом деле я думал, что принятый ответ означает, что это правильный ответ. Я снова изменил код. - person lifemoveson; 11.07.2011
comment
правильный означает, что он ответил на вопрос, который вы задавали, не так ли? - person Dad; 11.07.2011

Похоже, вам нужно округленное число, которое по-прежнему является плавающим, но только до 3 знаков после запятой, а не только для целей отображения? Это то, что вы спрашиваете? Числа с плавающей запятой IEEE — настоящая боль. Вы можете назначить foo = 1.5, и тогда вы получите 1.499999999, и если вы затем скажете if ( foo == 1.5 ), это не удастся. Просто мне это кажется ошибкой, но в сети есть длинные описания того, почему это «правильно». Мне кажется, что это верно в башне из слоновой кости и бесполезно в реальном мире.

Итак, некоторые возможности. Интересно, сработает ли умножение на 1000, а затем округление до целого значения и последующее деление на 1000... Конечно, та же плавающая ошибка IEEE, извините, spec все еще может вас укусить... стоит пытаться.

Мне стало любопытно, и я написал быстрый тест:

CGFloat foo = 0.124979;
NSLog(@"foo is: %f", foo );
NSInteger ifoo = ceil(foo * 1000.0);
foo = ifoo / 1000.0;
NSLog( @"ifoo is: %d, and back to foo is: %f", ifoo, foo );

выводит это (в любом случае в симуляторе):

test[5127:207] foo is: 0.124979
test[5127:207] ifoo is: 125, and back to foo is: 0.125000

так что это может делать то, что вы хотите.

удача.

person Dad    schedule 11.07.2011

Посмотрите эту ссылку на stackoverflow, у нее есть два хороших варианта: округлить ее и преобразовать в строку или округлить с помощью NSNumberFormatter.

Ссылка: Округление CGFLoat

Надеюсь, это поможет вам!

person Paul N    schedule 11.07.2011