Я пытаюсь преобразовать числа, взятые из UITextField, которые, как я полагаю, на самом деле являются строками, и преобразовать их в Float, чтобы я мог их умножать.
У меня есть два UITextfield
s, которые объявлены следующим образом:
@IBOutlet var wage: UITextField
@IBOutlet var hour: UITextField
Когда пользователь нажимает кнопку UIButton, я хочу вычислить заработную плату, которую получает пользователь, но не могу, так как мне нужно сначала преобразовать их в числа с плавающей запятой, прежде чем я смогу их использовать.
Я знаю, как преобразовать их в целое число, выполнив следующие действия:
var wageConversion:Int = 0
wageConversion = wage.text.toInt()!
Однако я понятия не имею, как преобразовать их в числа с плавающей запятой.
источник
NSString
имеетfloatValue
расширение, ноString
его нет. Получить ошибку:'String' does not have member named floatValue
let floatValue = (Float)(Wage.text)
... В Swift 2.0Потому что в некоторых частях мира, например, вместо десятичной дроби используется запятая. Лучше всего создать NSNumberFormatter для преобразования строки в float.
источник
Я конвертирую String в Float следующим образом:
источник
NSString.floatValue
, который просто возвращается,0
если что-то не так). Обратите внимание, что этоNSNumberFormatter
было измененоNumberFormatter
.Обновить
Принятый ответ показывает более современный способ сделать
Swift 1
Вот как Пол Хегарти показал себя на занятии CS193p в Стэнфорде в 2015 году:
Вы даже можете создать вычисляемое свойство, чтобы не делать этого каждый раз
источник
Используя принятое решение, я обнаружил, что мой "1.1" (при использовании преобразования .floatValue) будет преобразован в 1.10000002384186, чего я не хотел. Однако, если бы я использовал вместо этого .doubleValue, я бы получил желаемый 1.1.
Так, например, вместо принятого решения я использовал следующее:
В моем случае мне не требовалась двойная точность, но использование .floatValue не давало мне правильного результата.
Просто хотел добавить это к обсуждению на случай, если кто-то еще столкнулся с той же проблемой.
источник
Ниже вы найдете дополнительный поплавок, вставьте! в конце, если вы знаете, что это Float, или используйте if / let.
источник
Вот адаптация Swift 3 решения Пола Хегарти из ответа rdprado с некоторой проверкой добавленных к нему опций (возвращение 0,0, если какая-либо часть процесса не работает):
Между прочим, я посещал Стэнфордский класс CS193p в iTunes University, когда он еще преподавал Objective-C.
Я обнаружил, что Пол Хегарти - ФАНТАСТИЧЕСКИЙ инструктор, и я очень рекомендую этот класс всем, кто только начинает заниматься iOS-разработкой на Swift !!!
источник
NumberFormatter
для работы с числами с плавающей запятой, введенными пользователем.источник
В быстром 4
источник
источник
return Float(self)
?У вас есть два варианта, очень похожих (по подходу и результату):
источник
Double()
строит Double из Int, например:var convertedDouble = Double(someInt)
Обратите внимание, что это будет работать только в том случае, если ваш текст действительно содержит число. Поскольку
Wage
это текстовое поле, пользователь может вводить все, что хочет, и это вызовет ошибку времени выполнения, когда вы перейдете к распаковке Optional, возвращенного изtoInt()
. Перед принудительной распаковкой необходимо убедиться, что преобразование прошло успешно.Редактировать:
Если вы уверены, что текст будет целым числом, вы можете сделать что-то вроде этого (обратите внимание, что
text
UITextField также является необязательным)):источник
wageConversionFloat
никогда не будет float, он вылетает напрямую, если входная строка является чем-то вроде float234.56
. как это могло быть принятым / одобренным решением ...?3
если в текстовом поле есть3.5
. Это происходит потому , что текст первого превращают вInt
, затемInt
преобразуется вFloat
.Я нашел другой способ взять входное значение UITextField и преобразовать его в число с плавающей запятой:
источник
ты можешь использовать,
Если вы хотите округлить число с плавающей запятой до двух знаков после запятой:
источник
Вот как я подошел к этому. Я не хотел «переходить мост», так как он все равно был удален из Xcode 6 beta 5, быстро и грязно:
источник
toDouble()
функцию со строкой «10», я имею в виду, если нет десятичной дроби. Он все равно рухнет. Потому что в этом случае count будет 1, и вы не справитесь с этим. Он рухнет вelse if comps[0] == "" || comps[1] == ""
. Во всяком случае, вы так серьезно относитесь к обращению.Для полноты картины это решение, использующее расширение,
UITextField
которое также может учитывать другую локаль.Для Swift 3+
источник
Float?
а не обрабатывать недопустимые значения как0.0
. Позвольте вызывающей стороне сделать что-то вроде того,let val = field.floatValue ?? 0.0
если в данном случае плохой результат должен быть равен нулю.Swift 4/5, используйте только Float (value).
Ответ: 123200
источник
Использовать это:
источник
Простой способ:
вы можете использовать тот же подход для других расчетов, надеюсь, это поможет !!
источник
float