2012-02-26 3 views
2

У меня есть два текстовых поля на моем представлении. После запроса пользователю ввести значение, я конвертирую их в float s для выполнения моих расчетов.Преобразование NSString в float дает неточное значение

Я использую следующий код:

variable1 = [textField1.text floatValue]; 
variable2 = [textField2.text floatValue];` 

Когда пользователь вводит в textField1 22,8, я получаю 22.80005 в variable1.

Я не получаю точного значения!

Как получить точное десятичное значение? Любое добавление может повлиять на точность вычислений.

ответ

6

И еще один вопрос касается точности с плавающей точкой!

Вы должны использовать вместо NSDecimalNumber:

NSDecimalNumber *variable1 = [NSDecimalNumber decimalNumberWithString:[textField1 text]]; 
NSDecimalNumber *variable2 = [NSDecimalNumber decimalNumberWithString:[textField2 text]]; 

Там еще информация в Number and Value Programming Guide.

3

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

3

Это зависит от того, расчеты вы делаете.

Для использования в валюте NSDecimalNumber. Для других расчетов используйте double вместо float. Проблемы с точностью возникают, когда число преобразуется из десятичной в двоичную. double даст вам лучшую точность (не точную, но точную), и этого должно быть достаточно для всего, что вы хотите сделать.

Есть способы, как делать точные вычисления на компьютерах, но они сложнее и всегда намного медленнее, чем float или double.

+0

Что относительно сравнений ... У меня есть приложение, в котором мне нужно сравнить десятичные значения. Структура такова, что значения находятся в строчном формате и когда я конвертирую строку в float, точность не является точной, например, преобразование -0.123456 из строки в double возвращает -0.12345, но мне нужны точные значения .. что я должен делать в этом случае – madLokesh

+0

Обычно вам нужны точные значения только в валютных расчетах. Точные числа могут быть достигнуты с помощью _fixed point arithmetics_ (в основном вы используете 'long' или' long long' с фиксированным числом десятичных знаков). Или вы можете использовать 'NSDecimalNumber', который предназначен для него. – Sulthan

+0

Фактически значения меняются в цифрах после десятичных чисел, некоторые из них имеют 6, некоторые из них имеют 9, некоторые из них 5, например – madLokesh

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