Swift字符串转换为Int总是返回nil

时间:2019-01-04 16:47:53

标签: swift string int

我正在尝试将String转换为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,它总是为零。有人知道我在做什么错吗?

2 个答案:

答案 0 :(得分:5)

问题是,字符串"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
}

但是我认为解决方案要容易得多。您的目标应该是将 price 值保存为数字(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

答案 1 :(得分:0)

只需为我刚刚遇到的奇怪的边缘情况添加此字符-从Int转换为String时,请确保在字符串中没有尾随空格或前导空格。

例如。

for date in next_thirty_days {
    let date_buffer: String = date.description[8...9]
    date_list.append(Int(date_buffer)!)
}

如果date_buffer的值具有前导或尾随空格,则此操作将失败。

另一个极端情况是,0中有一个前导string variable,例如。 07

希望它会有所帮助:)