将货币字符串转换为双精度浮点数的Swift方法

5
我有一个字符串"$4,102.33",需要转换为double类型。这个字符串始终是美元格式的。我唯一的方法是通过删除$,,然后将其转换为double类型。似乎NSFormatter只能让我将货币转换为字符串而不能反向转换。在将其转换为double类型之前,是否有内置函数或更好的方法可以替代仅仅删除$,

顺便提一下,避免在货币方面使用“Double”:https://dev59.com/h2865IYBdhLWcg3wnP2a - Alexander
如果您正确设置了NSNumberFormatter,它将轻松地将该字符串转换为数字。请在您的问题中展示您对NSNumberFormatter的尝试使用。 - rmaddy
啊 - 我只看到了 .string 方法。没想到还有一个 .number 方法。 :-( - user441058
2个回答

25

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)
}

2
注意 - 如果字符串始终以美元格式化,您需要将格式化程序的区域设置为 en_US。如果不这样做,在大多数其他区域设置中,字符串将无法正确解析。 - rmaddy

5
将给定货币的字符串转换为NSNumber很容易:
let formatter = NumberFormatter()
formatter.numberStyle = .currency
formatter.locale = Locale(identifier: "en_US")
let number = formatter.number(from: string)

将您的数字转化为Double或Decimal(推荐使用)非常直接:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接