Как получить значение с плавающей запятой как оно есть из текстового поля в цели c - PullRequest
0 голосов
/ 29 сентября 2011

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

Например: я ввел 40.7

rateField=[[rateField text] floatValue];

Я получаю rateFieldзначение как 40.7000008, но я хочу только 40.7.

, пожалуйста, помогите мне.

спасибо заранее

Спасибо Каждое тело,

Я пыталсявсе возможности, но я не могу получить то, что я хочу.Я не хочу печатать значение для преобразования в строку. Я хочу использовать это значение для вычисления.Если я снова использую Number Formatter, когда я конвертирую число в число с плавающей точкой, это создает ту же проблему. Так что я хочу только значение с плавающей точкой, но оно должно быть любым, что я дал в текстовом поле, оно не должно дополняться какими-либо значениями. Это моеТребование. Пожалуйста, помогите мне.

thanks®ards Balu


Спасибо Каждое тело,

Я перепробовал все возможности, но я не смог получить то, что я хочу,Я не хочу печатать значение для преобразования в строку. Я хочу использовать это значение для вычисления.Если я снова использую Number Formatter, когда я конвертирую число в число с плавающей точкой, это создает ту же проблему. Так что я хочу только значение с плавающей точкой, но оно должно быть любым, что я дал в текстовом поле, оно не должно дополняться какими-либо значениями. Это моетребование. Пожалуйста, помогите мне.

спасибо®ard Balu

Ответы [ 4 ]

3 голосов
/ 29 сентября 2011

Это нормально. Не гарантируется, что вы получите 40.7, если будете использовать даже double.

Если вы хотите вывести 40.7, вы можете использовать %.1f или NSNumberFormatter

0 голосов
/ 30 сентября 2011

Вы уже определили значение с плавающей запятой.

Числа с плавающей запятой имеют ограниченную точность.Хотя это зависит от системы, относительная ошибка с плавающей точкой из-за округления будет около 1,1e-8. Неэлементарные арифметические операции могут давать большие ошибки, и, конечно, при составлении нескольких операций необходимо учитывать распределение ошибок.

Кроме того, рациональные числа, которые в точности представимы в виде чисел с плавающей запятой в базе 10, например 0,1 или 0,7, не имеют точного представления в виде чисел с плавающей запятой в базе 2, которая используется внутри, независимо от размера мантиссы.Следовательно, они не могут быть преобразованы в их внутренние двоичные аналоги без небольшой потери точности.Это может привести к сбивающим с толку результатам: например, floor ((0.1 + 0.7) * 10) будет обычно возвращать 7 вместо ожидаемых 8, поскольку внутреннее представление будет примерно таким: 7.9999999999999991118 ....

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

0 голосов
/ 29 сентября 2011

При использовании чисел с плавающей запятой эти вещи могут происходить из-за способа хранения чисел в двоичном формате в памяти компьютера.

Это похоже на то, как 1/3 = 0,33333333333333 ... в десятичном видечисла.

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

0 голосов
/ 29 сентября 2011

Попробуйте вместо этого использовать double.Обычно решает эту проблему.Имеет отношение к точности хранения.

double dbl = [rateField.text doubleValue];

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...