programing

스위프트에서 문자열을 부동으로 변환

bestprogram 2023. 8. 5. 10:47

스위프트에서 문자열을 부동으로 변환

저는 UITextField에서 가져온 숫자를 변환하려고 합니다. 제 생각에는 문자열인 것 같습니다. 그리고 그것들을 Float로 변환합니다. 그래서 저는 그것들을 곱셈할 수 있습니다.

난 두 개가 있다.UITextfields는 다음과 같이 선언됩니다.

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

사용자가 UIButton을 누를 때 저는 사용자가 버는 임금을 계산하고 싶지만, 제가 그것들을 사용하기 전에 먼저 부유물로 변환해야 하기 때문에 할 수 없습니다.

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

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

하지만, 저는 그것들을 플로트로 변환하는 방법을 전혀 모릅니다.

스위프트 2.0+

이제 Swift 2.0을 사용하여Float(Wage.text)이것은 a를 반환합니다.Float?type. 방금 돌아온 아래 솔루션보다 더 명확합니다.0.

만약 당신이 원한다면,0환자에 대한 가치.Float어떤 이유로 당신은 사용할 수 있습니다.Float(Wage.text) ?? 0돌아올 것입니다.0만약 그것이 유효하지 않다면.Float.


이전 솔루션

이를 처리하는 가장 좋은 방법은 직접 주조입니다.

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).

분명히, 만약 애플이 추가한다면,floatValue스위프트에게 이것은 예외를 던져주겠지만, 그 동안에는 좋을 수도 있습니다.만약 그들이 나중에 그것을 추가한다면, 당신이 코드를 수정하기 위해 해야 할 일은 단지 내선번호를 제거하는 것이고, 당신이 이미 전화하고 있을 것이기 때문에 모든 것이 원활하게 작동할 것입니다..floatValue!

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

예를 들어, 세계의 일부 지역에서는 소수 대신 쉼표가 사용되기 때문입니다.NSNumber를 생성하는 것이 가장 좋습니다.문자열을 부동으로 변환하는 포맷터입니다.

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

다음과 같은 방법으로 문자열을 Float로 변환합니다.

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

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

갱신하다

승인된 답변은 보다 최신의 방법을 보여줍니다.

스위프트 1

2015년에 Paul Hegarty가 Stanford의 CS193p 클래스에서 보여준 것은 다음과 같습니다.

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

매번 그렇지 않아도 계산된 속성을 생성할 수 있습니다.

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

아래는 선택적 플로트를 제공합니다. 플로트로 알고 있는 경우 끝에!를 붙이거나 if/let을 사용합니다.

let wageConversion = Float(wage.text)

승인된 솔루션을 사용하여 "1.1"(.float Value 변환을 사용할 때)이 1.10000002384186으로 변환된다는 것을 알게 되었습니다. 이것은 제가 원하는 것이 아니었습니다.하지만 .doubleValue를 사용하면 원하는 1.1을 얻을 수 있습니다.

예를 들어, 승인된 솔루션을 사용하는 대신 다음과 같이 사용했습니다.

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

저의 경우 이중 정밀도가 필요하지 않았지만 .flatValue를 사용하는 것은 적절한 결과를 제공하지 못했습니다.

다른 사람이 같은 문제에 부딪혔을 경우를 대비하여 이 문제를 토론에 추가하고 싶었습니다.

다음은 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
    }
}

그런데, 저는 아이튠즈 대학에서 오브젝티브-C를 가르치고 있을 때 스탠포드의 CS193p 수업을 들었습니다.

저는 폴 헤가티가 환상적인 강사라는 것을 알게 되었고, 스위프트에서 iOS 개발자로 시작하는 모든 사람에게 이 수업을 강력히 추천합니다!!!

extension String {    
    func floatValue() -> Float? {
        return Float(self)
    }
}
import Foundation
"-23.67".floatValue // => -23.67

let s = "-23.67" as NSString
s.floatValue // => -23.67

인스위프트 4

let Totalname = "10.0" //Now it is in string

let floatVal  = (Totalname as NSString).floatValue //Now converted to float

Double()는 다음과

var convertedDouble = Double(someInt)

텍스트에 실제로 숫자가 포함된 경우에만 사용할 수 있습니다. 때부터Wage이며, 입력할 수 , 는 텍스필에서 때. 사용자는 원하는 대로 입력할 수 있으며 이는 옵션 반환 위치의 상자를 열 때 런타임 오류를 트리거합니다.toInt()강제로 상자를 열기 전에 변환이 성공했는지 확인해야 합니다.

if let wageInt = Wage.text?.toInt() {
    //we made it in the if so the conversion succeeded.
    var wageConversionDouble = Double(wageInt)
}

편집:

여러분이가 될 은 다음과 을 할 수 .textUI 텍스트 필드):

if let wageText = Wage.text {
    var wageFloat = Double(wageText.toInt()!)
}
Works on Swift 5+

import Foundation

let myString:String = "50"
let temp = myString as NSString
let myFloat = temp.floatValue
print(myFloat)  //50.0
print(type(of: myFloat)) // Float

또한 앱이 충돌할 때마다 무슨 일이 일어나고 있는지 확인하기 위해 당신의 가치를 보호할 수 있습니다.

guard let myFloat = temp.floatValue else {
fatalError(" fail to change string to float value.")
}

다음과 같은 방법으로 문자열을 Float로 변환합니다.

let wage:Float = Float(textField.text!)!

저는 이렇게 접근했습니다.어쨌든 Xcode 6 베타 5에서 빠르고 지저분하게 제거되었기 때문에 "다리를 건너"고 싶지 않았습니다.

extension String {

    // converting a string to double
    func toDouble() -> Double? {

        // split the string into components
        var comps = self.componentsSeparatedByString(".")

        // we have nothing
        if comps.count == 0 {
            return nil
        }
        // if there is more than one decimal
        else if comps.count > 2 {
            return nil
        }
        else if comps[0] == "" || comps[1] == "" {
            return nil
        }

        // grab the whole portion
        var whole = 0.0
        // ensure we have a number for the whole
        if let w = comps[0].toInt() {
            whole = Double(w)
        }
        else {
            return nil
        }

        // we only got the whole
        if comps.count == 1 {

            return whole

        }

        // grab the fractional
        var fractional = 0.0
        // ensure we have a number for the fractional
        if let f = comps[1].toInt() {

            // use number of digits to get the power
            var toThePower = Double(countElements(comps[1]))

            // compute the fractional portion
            fractional = Double(f) / pow(10.0, toThePower)

        }
        else {
            return nil
        }

        // return the result
        return whole + fractional
    }

    // converting a string to float
    func toFloat() -> Float? {

        if let val = self.toDouble() {
            return Float(val)
        }
        else {
            return nil
        }

    }

}


// test it out
var str = "78.001"

if let val = str.toFloat() {
    println("Str in float: \(val)")
}
else {
    println("Unable to convert Str to float")
}

// now in double
if let val = str.toDouble() {
    println("Str in double: \(val)")
}
else {
    println("Unable to convert Str to double")
}

접근 방식과 결과에 따라 매우 유사한 두 가지 옵션이 있습니다.

// option 1:
var string_1 : String = "100"
var double_1 : Double = (string_1 as NSString).doubleValue + 99.0

// option 2: 
var string_2 : NSString = "100"
// or:  var string_2 = "100" as NSString
var number_2 : Double = string_2.doubleValue;

완전성을 위해 이것은 다음의 확장을 사용하는 솔루션입니다.UITextField다른 로케일도 고려할 수 있습니다.

스위프트 3+용

extension UITextField {
    func floatValue(locale : Locale = Locale.current) -> Float {
        let numberFormatter = NumberFormatter()
        numberFormatter.numberStyle = .decimal
        numberFormatter.locale = locale

        let nsNumber = numberFormatter.number(from: text!)
        return nsNumber == nil ? 0.0 : nsNumber!.floatValue
    }
}

UITextField의 입력 값을 가져와서 플로트에 캐스팅하는 다른 방법을 찾았습니다.

    var tempString:String?
    var myFloat:Float?

    @IBAction func ButtonWasClicked(_ sender: Any) {
       tempString = myUITextField.text
       myFloat = Float(tempString!)!
    }

당신은 사용할 수 있습니다.

let wg = Float(wage.text!)

플로트를 소수점 두 자리로 반올림하려면:

let wg = Float(String(format: "%.2f",wage.text!)

Swift 4/5, Float(값)만 사용합니다.

let string_value : String = "123200"

let float_value : Float = Float(string_value)

print(float_value)

답변: 123200

이전 방법을 수정해야 하는 것처럼 Xcode 11에서 문자열을 Float로 변환합니다.

func stringToFloat(value : String) -> Float {
    let numberFormatter = NumberFormatter()
    let number = numberFormatter.number(from: value)
    let numberFloatValue = number?.floatValue
    return numberFloatValue!
}

사용:

 // get the values from text boxes
    let a:Double = firstText.text.bridgeToObjectiveC().doubleValue
    let b:Double = secondText.text.bridgeToObjectiveC().doubleValue

//  we checking against 0.0, because above function return 0.0 if it gets failed to convert
    if (a != 0.0) && (b != 0.0) {
        var ans = a + b
        answerLabel.text = "Answer is \(ans)"
    } else {
        answerLabel.text = "Input values are not numberic"
    }

쉬운 방법:

// toInt returns optional that's why we used a:Int?
let a:Int? = firstText.text.toInt()
let b:Int? = secondText.text.toInt()

// check a and b before unwrapping using !
if a && b {
    var ans = a! + b!
    answerLabel.text = "Answer is \(ans)"
} else {
    answerLabel.text = "Input values are not numberic"
}

다른 계산에도 동일한 접근 방식을 사용할 수 있습니다. 이 도움이 되길 바랍니다!

언급URL : https://stackoverflow.com/questions/24085665/convert-string-to-float-in-swift