스위프트에서 문자열을 부동으로 변환
저는 UITextField에서 가져온 숫자를 변환하려고 합니다. 제 생각에는 문자열인 것 같습니다. 그리고 그것들을 Float로 변환합니다. 그래서 저는 그것들을 곱셈할 수 있습니다.
난 두 개가 있다.UITextfield
s는 다음과 같이 선언됩니다.
@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)
}
편집:
여러분이가 될 은 다음과 을 할 수 .text
UI 텍스트 필드):
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
'programing' 카테고리의 다른 글
목록 보기용 사용자 지정 어댑터 (0) | 2023.08.05 |
---|---|
Django 템플릿의 계수 % (0) | 2023.08.05 |
작은 목록보다 작은 문자열에 대해 반복하는 것이 느린 이유는 무엇입니까? (0) | 2023.08.05 |
요청한 항목을 찾을 수 없습니다.Visual Studio 2010 Professional의 Net Framework 데이터 공급자 (0) | 2023.08.05 |
jquery를 tampermonkey 스크립트에 로드하려고 합니다. (0) | 2023.08.05 |