Преобразование строки с запятыми в int в swift

-2

let y = "1,312,000.99" let z = (y as NSString).intValue

Я хочу, чтобы z было равно 1312000. Итак, в основном:

  1. Строка должна быть преобразована в int
  2. Целое число не должно иметь запятых
  3. Все, что следует после десятичного знака, следует игнорировать.
  • 2
    И что мешает вам сделать это?
  • 0
    Я хотел знать, делает ли это какой-нибудь из API-интерфейсов iOS?
Теги:
xcode

2 ответа

1
  1. Строка должна быть преобразована в int
  2. Целое число не должно иметь запятых
  3. Все, что следует после десятичного знака, следует игнорировать.

Я бы сказал, что вам нужно сделать это наоборот:

  1. Избавьтесь от всего после десятичной точки
  2. Удалите нечисловые значения
  3. Преобразуйте его в Int

Существует несколько способов сделать это

Вы можете использовать CharacterSet.decimalDigits, что-то вроде...

"1,312,000.99".components(separatedBy: CharacterSet.decimalDigits.inverted).joined()

это вроде беспорядочно, поскольку одна вещь, которую я не делал, - это удалить .99, но это может быть сделано...

var value = "1,312,000.99"
value = String(value[value.startIndex..<value.firstIndex(of: ".")!])

note: Я не проверяю, является ли firstIndex nil каким он может быть, поэтому вам нужно будет это компенсировать.

Другим, возможно, лучшим решением было бы использовать NumberFormatter

let formater = NumberFormatter()
formater.numberStyle = .decimal
formater.locale = Locale(identifier: "en_AU")
let number = formater.number(from: "1,312,000.99")

Затем вы можете просто передать его значение Int

let intValue = Int(number!)

Опять же, проверьте number поскольку это может быть nil

  • 1
    Использование форматера чисел, вероятно, лучше, но вам может потребоваться установить конкретную локаль в зависимости от строки. Если строка всегда отформатирована , для тысяч сепаратора и . для десятичного разделителя необходимо установить языковой стандарт en_US_POSIX . В противном случае он не будет работать на устройствах, для которых задан языковой стандарт, в котором используются разные разделители (и цифры).
  • 0
    @rmaddy Хороший совет!
Показать ещё 5 комментариев
0

Попробуйте код:

//Create a NumberFormatter that takes input strings with comma thousands separators and at least 1 decimal place
let inputFormatter = NumberFormatter()
inputFormatter.format = "###,###,###,###.#"
inputFormatter.locale = Locale(identifier:  "en_US_POSIX")

var numberString = "1,234,567.88"

//Convert the input string to an Int (which truncates the decimal portion)
if let value = inputFormatter.number(from: numberString)?.intValue {
    print(value)
    //print( outputString)
} else {
    print("Can't convert")
}
  • 0
    NumberFormat format предназначен только для macOS, а не для iOS.
  • 0
    @rmaddy О, дорогой. Так что, это. (Документы позволяют легко пропустить подобные одноплатформенные элементы.) Я не смог заставить работать тысячSeparator правильно. У вас есть пример кода, использующего это?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню