Apple의 Swift에서 노드를 부동으로 변환
나는 UITextField에서 숫자를 사용하여 변환하고 부동 소수점으로 변환하여 곱할 수 있습니다.
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) ?? 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
)로 시작해야합니다.
예를 들어 세계의 일부 지역에서는 소수 대신 쉼표가 사용되기 때문입니다. 업그레이드를 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
제 경우에는 배정도가 필요하지 않습니다. 플로트 가치를 사용하면 결과를 얻지.
다른 사람이 같은 문제를 배치하고있는 경우를 대비하여 토론에 추가하고 싶었습니다.
아래는 선택적인 Float를 제공합니다. 마지막에 Float인지 알고 계시다면 if / let을 사용하십시오.
let wageConversion = Float(wage.text)
import Foundation
"-23.67".floatValue // => -23.67
let s = "-23.67" as NSString
s.floatValue // => -23.67
다음은 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 강사라는 것을 알리는 모든 사람에게 iOS 개발자에게 강력히 추천합니다 !!!
extension String {
func floatValue() -> Float? {
return Float(self)
}
}
스위프트 4에서
let Totalname = "10.0" //Now it is in string
let floatVal = (Totalname as NSString).floatValue //Now converted to float
접근 방식과 결과에 따라 방식대로 두 가지 옵션이 있습니다.
// 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;
Double()
다음과 같이 Int에서 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
UITextField에서도 선택 사항 임).
if let wageText = Wage.text {
var wageFloat = Double(wageText.toInt()!)
}
UITextField의 입력 값을 가져와 float로 캐스팅하는 또 다른 방법을 찾았습니다.
var tempString:String?
var myFloat:Float?
@IBAction func ButtonWasClicked(_ sender: Any) {
tempString = myUITextField.text
myFloat = Float(tempString!)!
}
이것이 내가 접근 한 방법입니다. 어쨌든 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")
}
완전성을 위해 이것은 UITextField
다른 로케일도 고려할 수 있는 확장을 사용하는 솔루션 입니다.
Swift 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
}
}
Swift 4/5, Float (value) 만 사용하세요.
let string_value : String = "123200"
let float_value : Float = Float(string_value)
print(float_value)
답변 : 123200
이것을 사용하십시오 :
// 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-apples-swift
'IT' 카테고리의 다른 글
JavaScript는 유형이 지정되지 않은 언어입니까? (0) | 2020.08.31 |
---|---|
목록에있는 개체 수 계산 (0) | 2020.08.31 |
프로그래머 퍼즐 : 게임 내내 체스 판 상태 인코딩 (0) | 2020.08.31 |
MySQL은 처음 10 개의 결과를 건너 뛰었습니다. (0) | 2020.08.31 |
ImportError : NUMPY_MKL 이름이 없습니다. (0) | 2020.08.31 |