2017-01-26 84 views
-1

我有一個字符串,"$4,102.33"需要轉換爲雙倍。這將永遠是美國。我唯一的辦法就是剔除$,,然後轉換成雙精度。似乎NSFormatter只能讓我轉換成貨幣而不是它。是否有內置功能或更好的方式,而不僅僅是刪除$,?在將其轉換爲雙倍之前?Swift convert貨幣字符串加倍

感謝。

+0

注意,避免使用'雙'貨幣:http://stackoverflow.com/questions/3730019/why-not-use-double-or-float-to-represent-currency – Alexander

+0

'NSNumberFormatter'將很容易地轉換該字符串麻木了呃如果你正確設置它。在你的問題中顯示你嘗試使用'NSNumberFormatter'。 – rmaddy

+0

Argh - 我只看到了.string方法。沒有意識到有一個.number方法。 :-( – user441058

回答

6

NumberFormatter可以轉換字符串和從字符串轉換。 Double也不能完全代表某些數字,因爲它基於2.使用Decimal更慢但更安全。

let str = "$4,102.33" 

let formatter = NumberFormatter() 
formatter.numberStyle = .currency 

if let number = formatter.number(from: str) { 
    let amount = number.decimalValue 
    print(amount) 
} 
+1

注意 - 如果字符串總是要格式化爲USD,則需要將格式化程序的區域設置爲'en_US'。否則,字符串在大多數其他語言環境中將不會被正確解析。 – rmaddy

+0

@maddy好趕上 – muescha

0

從字符串轉換成的NSNumber對於給定的貨幣很簡單:

let formatter = NumberFormatter() 
formatter.numberStyle = .currency 
formatter.locale = Locale(identifier: "en_US") 
let number = formatter.number(from: string) 

要得到你的電話號碼爲雙人間或爲十進制(preferred),然後直接:

let doubleValue = number?.doubleValue 
let decimalValue = number?.decimalValue