gpt4 book ai didi

ios - Swift iOS - 将货币格式的字符串转换为数字

转载 作者:搜寻专家 更新时间:2023-10-31 22:12:16 25 4
gpt4 key购买 nike

我已经使用 NumberFormatter 类将数字转换为货币格式的字符串(例如 2000 -> £2,000.00)。但是,我需要一种将格式化字符串转换回数字的方法(例如 £2,000.00 -> 2000)。

事实证明,简单地通过格式化程序运行它是行不通的,只会产生 nil。有谁知道实现此目标的最佳方法?

最佳答案

Swift 4:以下字符串扩展有助于将货币格式的字符串转换为十进制或 double 。该方法自动识别大多数常见货币的数字格式。

字符串必须没有货币符号(€、$、£、...):

For Example:

US formatted string: "11.233.39" -> 11233.39

European formatted string: "11.233,39" -> 11233.39

// String+DecimalOrDouble

extension String {
func toDecimalWithAutoLocale() -> Decimal? {
let formatter = NumberFormatter()
formatter.numberStyle = .decimal

//** US,CAD,GBP formatted
formatter.locale = Locale(identifier: "en_US")

if let number = formatter.number(from: self) {
return number.decimalValue
}

//** EUR formatted
formatter.locale = Locale(identifier: "de_DE")

if let number = formatter.number(from: self) {
return number.decimalValue
}

return nil
}

func toDoubleWithAutoLocale() -> Double? {
guard let decimal = self.toDecimalWithAutoLocale() else {
return nil
}

return NSDecimalNumber(decimal:decimal).doubleValue
}
}

在 Playground 中测试的示例:

import Foundation

//US formatted without decimal mark
str = "11233.3"
decimal = str.toDecimalWithAutoLocale() //11233.3
double = str.toDoubleWithAutoLocale() //11233.3

//EU formatted without decimal mark
str = "11233,3"
decimal = str.toDecimalWithAutoLocale() //11233.3
double = str.toDoubleWithAutoLocale() //11233.3

//US formatted with decimal mark
str = "11,233.3"
decimal = str.toDecimalWithAutoLocale() //11233.3
double = str.toDoubleWithAutoLocale() //11233.3

//EU formatted with decimal mark
str = "11.233,3"
decimal = str.toDecimalWithAutoLocale() //11233.3
double = str.toDoubleWithAutoLocale() //11233.3

关于ios - Swift iOS - 将货币格式的字符串转换为数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42186805/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com