Итак, у меня есть строка только с цифрами и запятыми. например «1 233 323,32» (строка), но я хочу преобразовать это в 1233323,32 (двойное).
Что вы пробовали?
Я пробовал NumberFormatter, но я не настолько опытен, чтобы понять, что делать. Я новичок в Swift
Не могли бы вы опубликовать свой код?
Используйте NumberFormatter
:
let formatter = NumberFormatter()
formatter.numberStyle = .decimal
let number = formatter.number(from: "1,233,323.32")
Имейте в виду, что это, вероятно, не удастся для пользователей в локали, которая использует разные разделители для группировки и десятичного числа.
Да, но это «StaticString».
Я не понимаю смысла вашего ответа. Для пользователей в локали, которые используют ,
в качестве десятичного разделителя, значение number
будет nil
для такой строки, как 1,233,323.32
.
Свифт 4.x:
Вот ваше решение с ручным подходом
var a = "1,233,323.32"
print(a.contains(","))
проверьте, сколько раз встречается ',' в строке, указанной ниже
print("occurrence of ',': \(a.characters.filter {$0 == ","}.count)")
если ',' встречается в строке 2 раза, удалите ',' из строки 2 раза, используя цикл, указанный ниже
for _ in 1...(a.characters.filter {$0 == ","}.count) {
a.remove(at: a.index(of: ",")!)
}
print("Ans: \( Double(a)! )")
выход
true
occurrence of ',': 2
Ans: 1233323.32
Свифт 4: Итак, в основном у нас есть строка с запятыми, и мы просто удаляем все запятые в строке, а затем используем NumberFormatter для преобразования ее в двойную.
var newDouble = 0.0
var string = ""
string = textField.text?.replacingOccurrences(of: ",", with: "", options: NSString.CompareOptions.literal, range: nil) ?? ""
let myDouble = NumberFormatter().number(from: string)?.doubleValue
newDouble = myDouble ?? 0.0
Этот код работает правильно, только если есть только цифры и запятые.
Используйте
NumberFormatter
.