Swift 4
extension String {
static let numberFormatter = NumberFormatter()
var doubleValue: Double {
String.numberFormatter.decimalSeparator = "."
if let result = String.numberFormatter.number(from: self) {
return result.doubleValue
} else {
String.numberFormatter.decimalSeparator = ","
if let result = String.numberFormatter.number(from: self) {
return result.doubleValue
}
}
return 0
}
}
"2.25".doubleValue // 2.25
"2,25".doubleValue // 2.25
使用 NumberFormatter 的本地化方法:
extension NumberFormatter {
static let shared = NumberFormatter()
}
extension StringProtocol {
var doubleValue: Double? {
return NumberFormatter.shared.number(from: String(self))?.doubleValue
}
}
游乐场测试
NumberFormatter.shared.locale
NumberFormatter.shared.numberStyle
NumberFormatter.shared.decimalSeparator
"2.7".doubleValue
"2,7".doubleValue
"$2.70".doubleValue
NumberFormatter.shared.numberStyle = .currency
"2.7".doubleValue
"2,7".doubleValue
"$2.70".doubleValue
NumberFormatter.shared.locale = Locale(identifier: "pt_BR")
"2.7".doubleValue
"2,7".doubleValue
"R$2,70".doubleValue
NumberFormatter.shared.numberStyle = .none
"2.7".doubleValue
"2,7".doubleValue
"R$2,70".doubleValue