Swift playground - как преобразовать строку с запятой в строку с десятичной запятой
Я новичок в мире Swift.
Как преобразовать строку с запятой в строку с десятичным числом?
работа кода в порядке с точкой (.)
проблема в том, что я использую запятую (,)... с: var цена
источником проблемы является десятичная французская клавиатура, использующая запятую (,) вместо точки (.)
Не знаю точно, как использовать NSNumberFormatter или generatesDecimalNumbers если это ключ. Есть probebly более одного варианта.
//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)
Спасибо за ваше время и помощь!
4 ответов
обновление: Xcode 8.2.1 * Swift 3.0.2 Вы можете использовать NumberFormatter() для преобразования строки в number. Вам просто нужно указать 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, поэтому создайте только для чтения вычисляемое свойство currency, расширяющее протокол 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 // ".25"
Currency.formatter.locale = Locale(identifier: "en_US")
"2222.25".doubleValue.currency // ",222.25"
"2222,25".doubleValue.currency // ",222.25"
Currency.formatter.locale = Locale(identifier: "pt_BR")
"2222.25".doubleValue.currency // "R.222,25"
"2222,25".doubleValue.currency // "R.222,25"
var price = "2,25"
price = price.replacingOccurrences(of: ".", with: ",")
var priceFloat = (price as NSString).floatValue
вы можете использовать для этого Swift 3:
let currentAmount = 2,50
currentAmount = currentAmount.replacingOccurrences(of: ",", with: ".")
print(currentAmount) // 2.50
или, если вам не нравятся расширения:
let price = "2,25"
var counter: Int = 0
var noCommaNumber: String!
for var Character in price.characters {
if Character == "," { Character = "." }
if counter != 0 { noCommaNumber = "\(noCommaNumber)" + "\(Character)" } else { noCommaNumber = "\(Character)" }
counter++
}
importo = Float(noCommaNumber)
let costString = String(format:"%.2f", importo)