我是斯威夫特世界的新手.
如何将带逗号的String转换为带小数的String?
代码工作正常,带点(.)
问题是当我使用逗号(,)…时:var price
问题的起源是Decimal法语键盘使用逗号(,)而不是点(.)
如果它是密钥,不知道如何使用NSNumberFormatter或generateDecimalNumbers.有不止一个选择.
//The answer change if "2,25" or "2.25" is used. var price : String = "2,25" var priceFloat = (price as NSString).floatValue //I need to have 2.25 as answer. var costString = String(format:"%.2f",priceFloat)
感谢您的时间和帮助!
更新:Xcode 8.2.1•Swift 3.0.2
您可以使用NumberFormatter()将字符串转换为数字.您只需要指定decimalSeparator,如下所示:
您可以使用NumberFormatter()将字符串转换为数字.您只需要指定decimalSeparator,如下所示:
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 let price = "2,25" let costString = String(format:"%.2f",price.doubleValue) // "2.25"
您还应该使用NumberFormat进行货币格式化,因此创建一个只读计算属性货币,扩展FloatingPoint协议以从String doubleValue属性返回格式化字符串.
extension NumberFormatter { convenience init(style: Style) { self.init() self.numberStyle = style } } extension Formatter { static let currency = NumberFormatter(style: .currency) } extension FloatingPoint { var currency: String { return Formatter.currency.string(for: self) ?? "" } }
let costString = "2,25".doubleValue.currency // "$2.25"
Currency.formatter.locale = Locale(identifier: "en_US") "2222.25".doubleValue.currency // "$2,222.25" "2222,25".doubleValue.currency // "$2,222.25" Currency.formatter.locale = Locale(identifier: "pt_BR") "2222.25".doubleValue.currency // "R$2.222,25" "2222,25".doubleValue.currency // "R$2.222,25"