2017-09-04 5 views
0

이 유형의 문자열 "8.37"을 10 진수 값 8.37로 변환하는 방법? 내가 스위프트 4.Swift에서 숫자 문자 참조를 소수점으로 변환하는 방법은 무엇입니까?

을 사용하고 내가 시도 :

extension String { 

func hexToFloat() -> Float { 
    var toInt = Int32(truncatingIfNeeded: strtol(self, nil, 16)) 
    var float:Float32! 
    memcpy(&float, &toInt, MemoryLayout.size(ofValue: float)) 
    return float 
} 
} 

[...] 

let myString = "8.37" 
let myDecimal = myString.hexToFloat() 
print(myDecimal) // prints 0.0 

(From here)

답변

0

(적어도 내 지식에) 더 정직 방법은 없습니다. 그러나 당신은 가치를 얻기 위해 아래와 같이 할 수 있습니다. 아래 코드는 Swift 3에 있습니다. 구문을 변경해야 할 수도 있습니다.

extension String {  
    func hexToFloat() -> Float { 
     let data = myString.data(using: .utf8) 
     let options: [String: Any] = [NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType] 
     do { 
      let attributedString = try NSAttributedString(data: data!, options: options, documentAttributes: nil) 
      return Float(attributedString.string)! 
     } catch { 
      return 0 
     } 
    } 
} 

let myString = "8.37" 
let myDecimal = myString.hexToFloat() 
print(myDecimal) // prints 8.37 
+0

감사! 실제로 Swift 3에서 작동하지만 제안 된 수정을 적용한 후에도 Swift 4에서 오류가 있습니다. 고정 코드 :'[...] 옵션을 사용합니다 : [String : Any] = [NSAttributedString.DocumentAttributeKey.documentType.rawValue : NSAttributedString.DocumentType.html] [...]' 6 행의 오류 : " '[String : Any]'유형의 값을 예상되는 인수 유형 '[NSAttributedString.DocumentReadingOptionKey : Any]'으로 변환 할 수 없습니다." –

+0

이 옵션을 사용해보십시오 : [String : Any] = [.documentType : NSAttributedString.DocumentType.html ]' – Malik

+0

불행히도,'let options : [String : Any] = [NSAttributedString.DocumentAttributeKey.documentType.rawValue : NSAttributedString.DocumentType.html]'을'let options : [String : Any] = [.documentType : NSAttributedString.DocumentType.html]'이 (가) 작동하지 않았습니다. 다른 하나에이 오류 메시지가 있습니다. " 'String'에 'documentType'멤버가 없습니다." –