Преобразование строки NSString в float дает неточное значение - PullRequest
2 голосов
/ 26 февраля 2012

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

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

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

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

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

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

Ответы [ 3 ]

6 голосов
/ 26 февраля 2012

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

Вместо этого следует использовать NSDecimalNumber:

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

В Руководстве по программированию Число и значение есть дополнительная информация.

3 голосов
/ 26 февраля 2012

Зависит от того, какие расчеты вы делаете.

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

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

3 голосов
/ 26 февраля 2012

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

...