2017-09-04 41 views
0

如何將這種類型的字符串"8.37"轉換爲它的十進制值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中出現錯誤。 固定代碼:'[...] let options:[String:Any] = [NSAttributedString.DocumentAttributeKey.documentType.rawVal ue:NSAttributedString.DocumentType.html] [...]' 錯誤在第6行: 「無法將類型'[String:Any]'的值轉換爲期望的參數類型'[NSAttributedString.DocumentReadingOptionKey:Any]'」 –

+0

嘗試使用這個'let options:[String:Any] = [.documentType:NSAttributedString.DocumentType.html ]' – Malik

+0

不幸的是,用'let選項:[String:Any] = [.documentType]替換'let options:[String:Any] = [NSAttributedString.DocumentAttributeKey.documentType.rawVal ue:NSAttributedString.DocumentType.html]'' :NSAttributedString.DocumentType.html]'不起作用。除了另一個外,我還有這個錯誤信息:「類型'字符串'沒有成員'documentType'」 –

相關問題