2017-01-26 85 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