let y = "1,312,000.99"
let z = (y as NSString).intValue
Я хочу, чтобы z было равно 1312000
. Итак, в основном:
- Строка должна быть преобразована в int
- Целое число не должно иметь запятых
- Все, что следует после десятичного знака, следует игнорировать.
Я бы сказал, что вам нужно сделать это наоборот:
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
,
для тысяч сепаратора и .
для десятичного разделителя необходимо установить языковой стандарт en_US_POSIX
. В противном случае он не будет работать на устройствах, для которых задан языковой стандарт, в котором используются разные разделители (и цифры).
Попробуйте код:
//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")
}
NumberFormat format
предназначен только для macOS, а не для iOS.