2010-12-01 5 views
0

Я вот в чем проблема: У меня есть NSString, который содержит «1.7» (например), и мне нужно получить число с плавающей точкой = 1.7 I ' ve попытался с [mystring floatValue], но результат 1.700000000004576 Если я попробую с «1.74», результат будет 1.74000000000000000067484 как я могу его исправить? спасибо!Как преобразовать строку UTF8 в значение float в объекте-c

ответ

0

Решенный! Я использовал sqlite3_bind_text, даже если мой атрибут базы данных - значение FLOAT, и я использовал mystring вместо myfloat, и он отлично работает! Спасибо!

2

Вы правильно конвертируете строку в поплавок. Проблема в том, что числа с плавающей запятой не могут точно представлять все действительные числа. Прямое назначение:

float x = 1.7; 

по-прежнему будет иметь точность ошибки. Это как раз то, что числа с плавающей запятой.

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

+0

спасибо вам tempestive answer.the проблема заключается в том, что я должен вставить значение с плавающей точкой в ​​БД SQLite, а затем использовать это значение с плавающей точкой для сделать некоторый запрос в Интернете, мне нужно поставить 1.7 в мой дб можно округлить это значение? – Daniele 2010-12-01 17:42:30

+0

Вы могли бы использовать исходную строку для запроса? Затем вы можете сохранить строку в своем db. После преобразования строки в float вы не сможете узнать, было ли исходное значение 1,7 или 1,700000000004576. – 2010-12-01 17:50:34

+0

теперь я понял, большое вам спасибо! Я использовал строку вместо float, и она работает нормально. – Daniele 2010-12-01 18:02:46

0

Поплавки должны быть способны представлять бесконечно много действительных чисел, но поплавок содержит конечное число бит, поэтому поплавки являются приближениями.

См. this article для получения дополнительной информации.

0

Вы можете обрезать ответ, используя формы ниже. .1 установит результат на одно десятичное место.

NSLog(@"mystring = %.1f ",[mystring floatValue]); 
Смежные вопросы