2015-05-02 4 views
-1

Я получаю unusal вопрос с поплавка в Objective C. Я вхожу 100,1 и я получаю 100,100002 не должна быть чем-то вроде 100.100000.всплывают необычное поведение Objective C

Ниже приводится код

float temp=100.1; 
NSLog(@"%f",temp); 

100.100000 

Может кто-то наставит меня, что я делаю неправильно или как это исправить? Я не могу использовать фиксированные десятичные разряды. I-e я не могу просто использовать 100.10. Мне нужны все десятичные знаки.

+2

Сводка тега с плавающей запятой говорит: «Если ваш вопрос касается небольших ошибок арифметики или десятичного преобразования, пожалуйста, прочитайте страницу« подробнее ... », приведенную ниже». http://stackoverflow.com/questions/tagged/floating-point –

+0

Вы не должны использовать float, пока не сможете рассказать нам, почему вы не используете double. – gnasher729

+0

@ gnasher729 - И вы никогда не должны использовать двойной, пока не узнаете, что означает «плавающая точка». –

ответ

1

Потому что это фундаментальная часть того, что происходит, когда вы представляете произвольный floating point value в двоичном формате. Количество двоичных цифр ограничено, поэтому происходит округление. В зависимости от ваших потребностей вам может быть полезно использовать NSDecimalNumber.

-1

Попробуйте вместо этого использовать double;

double temp=100.1; 
NSLog(@"%.8f",temp); 

100.10000000 

Это проблема с точностью представления. Я не думаю, что вместо этого будет использовать double.

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