Swift String для Int всегда возвращает ноль - PullRequest
0 голосов
/ 04 января 2019

Я пытаюсь преобразовать строку в Int. Кажется достаточно простым, но по какой-то причине он всегда возвращает nil.

Я просто пишу простое расширение для конвертации долларов в центы:

func dollarsToCents() -> Int {
    var temp = self;
    temp = temp.replacingOccurrences(of: "$", with: "")
    temp = temp.replacingOccurrences(of: ",", with: "")

    if let number = Int(temp) {
        return number*100
    }

    return 0
}

У меня temp установлено значение "$ 250,89". number всегда ноль. Независимо от того, как я подхожу к преобразованию temp в Int, оно всегда равно нулю. Кто-нибудь знает, что я делаю не так?

1 Ответ

0 голосов
/ 04 января 2019

Проблема в том, что строка "250.89" (после удаления символа валюты) не может быть преобразована в Int, поскольку 250.89 не является целым числом. Так что исправьте свой код, преобразовав его в Double

func dollarsToCents() -> Int {
    var temp = self
    temp.removeAll { "$,".contains($0) }
    //temp = temp.replacingOccurrences(of: "[$,]", with: "", options: .regularExpression)
    return Int(((Double(temp) ?? 0) * 100).rounded())
}

или если ваш "номер" всегда имеет два десятичных знака

func dollarsToCents() -> Int {
    var temp = self
    temp.removeAll { !("0"..."9" ~= $0) }
    return Int(temp) ?? 0
}

Но я думаю, что решение намного проще. Ваша цель - сохранить значение цена как число (Double, ...). Тогда вам не нужно конвертировать String в Double, и вы можете просто умножить свой номер. Затем, когда вам нужно добавить символ валюты, просто конвертируйте значение в String и добавьте $ или используйте NumberFormatter

let price = 250.89
let formattedPrice = "$\(price)" // $250.89

let price = 250.89
let formatter = NumberFormatter()
formatter.numberStyle = .currency
formatter.currencyCode = "USD"
let formattedPrice = formatter.string(from: price as NSNumber)! // $250.89
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...