[string] Swift에서 문자열을 Float로 변환

나는 UITextField에서 가져온 숫자를 실제로 String으로 변환하고 Float로 변환하여 곱할 수 있도록 노력하고 있습니다.

UITextfield다음과 같이 선언 된 두 가지 가 있습니다.

@IBOutlet var wage: UITextField
@IBOutlet var hour: UITextField

사용자가 UIButton을 눌렀을 때 사용자가 벌어 들인 임금을 계산하고 싶지만, 사용하기 전에 먼저 수레로 변환해야하므로 계산할 수 없습니다.

이 작업을 수행하여 정수로 변환하는 방법을 알고 있습니다.

var wageConversion:Int = 0
wageConversion = wage.text.toInt()!

그러나 나는 그것들을 수레로 변환하는 방법을 모릅니다.



답변

Swift 2.0 이상

이제 Swift 2.0Float(Wage.text) 에서는 Float?유형 을 반환하는 것을 사용할 수 있습니다 . 그냥 반환하는 아래 솔루션보다 더 명확합니다 0.

어떤 이유로 0유효하지 않은 값을 원한다면 유효하지 않은 경우 반환 되는 값을 Float사용할 수 있습니다 .Float(Wage.text) ?? 00Float


오래된 솔루션

이를 처리하는 가장 좋은 방법은 직접 캐스팅입니다.

var WageConversion = (Wage.text as NSString).floatValue

나는 실제로 extension이것을 더 잘 사용 하기 위해 만들었 습니다.

extension String {
    var floatValue: Float {
        return (self as NSString).floatValue
    }
}

이제 전화를 걸어 var WageConversion = Wage.text.floatValue내선이 브리지를 처리하도록 허용 할 수 있습니다!

이것은 실제 부동 (로 입력 .)을 처리 할 수 있고 사용자가 텍스트를 입력 필드 ( 12p.34또는 심지어 12.12.41) 로 복사하는 것을 방지 하기 때문에 좋은 구현 입니다.

분명히 Apple이 floatValueSwift 에 a 를 추가 하면 예외가 발생하지만 그 동안에는 좋을 수 있습니다. 나중에 추가하는 경우 코드를 수정하기 위해해야 ​​할 일은 확장 기능을 제거하는 것뿐입니다 .floatValue. 이미 호출하고 있기 때문에 모든 것이 원활하게 작동합니다 .

또한 변수와 상수는 소문자 (포함 IBOutlets)로 시작해야합니다.


답변

예를 들어 세계의 일부 지역에서는 소수 대신 쉼표가 사용되기 때문입니다. 문자열을 float로 변환하려면 NSNumberFormatter를 만드는 것이 가장 좋습니다.

let numberFormatter = NSNumberFormatter()
numberFormatter.numberStyle = NSNumberFormatterStyle.DecimalStyle
let number = numberFormatter.numberFromString(self.stringByTrimmingCharactersInSet(Wage.text))


답변

다음과 같이 String을 Float로 변환합니다.

let numberFormatter = NSNumberFormatter()
let number = numberFormatter.numberFromString("15.5")
let numberFloatValue = number.floatValue

println("number is \(numberFloatValue)") // prints "number is 15.5"


답변

최신 정보

허용되는 답변은 최신 방식을 보여줍니다.

스위프트 1

Paul Hegarty가 2015 년 Stanford의 CS193p 수업에서 보여준 방법입니다.

wageConversion = NSNumberFormatter().numberFromString(wage.text!)!.floatValue

매번 그렇게 할 필요가 없도록 계산 된 속성을 만들 수도 있습니다.

var wageValue: Float {
        get {
            return NSNumberFormatter().numberFromString(wage.text!)!.floatValue
        }
        set {
            wage.text = "\(newValue)"
        }
    }


답변

허용 된 솔루션을 사용하여 내 “1.1”(. floatValue 변환을 사용할 때)이 1.10000002384186으로 변환된다는 것을 발견했습니다. 그러나 .doubleValue를 대신 사용하면 원하는 1.1을 얻을 수 있습니다.

예를 들어 허용 된 솔루션을 사용하는 대신 다음을 대신 사용했습니다.

var WageConversion = (Wage.text as NSString).doubleValue

제 경우에는 배정 밀도가 필요하지 않았지만 .floatValue를 사용하면 적절한 결과를 얻지 못했습니다.

다른 사람이 같은 문제를 겪고있는 경우를 대비하여 토론에 추가하고 싶었습니다.


답변

아래는 선택적 Float를 제공합니다. 마지막에 그것이 Float인지 알고 있다면 if / let을 사용하십시오.

let wageConversion = Float(wage.text)


답변

다음은 rdprado의 답변에서 Paul Hegarty의 솔루션에 대한 Swift 3 적응입니다. 옵션이 추가되었는지 확인합니다 (프로세스의 일부가 실패하면 0.0을 반환합니다).

var wageFloat:Float = 0.0

if let wageText = wage.text {
    if let wageNumber = NumberFormatter().number(from: wageText) {
        wageFloat = wageNumber.floatValue
    }
}

그건 그렇고, 저는 여전히 Objective-C를 가르치고있을 때 iTunes University를 사용하여 Stanford의 CS193p 수업을 들었습니다.

Paul Hegarty가 FANTASTIC 강사라는 것을 알게되었고 Swift에서 iOS 개발자로 시작하는 모든 사람에게이 수업을 강력히 추천합니다 !!!