Swift String to Int 总是返回 nil

标签 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,它始终为零。有人知道我做错了什么吗?

最佳答案

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

关于Swift String to Int 总是返回 nil,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54043008/

相关文章:

Swift 从初始化程序返回而不初始化所有存储的属性

java - 当 Java 编译器在一行中看到许多字符串连接时会发生什么?

python - 如何使用部分匹配查找子字符串

android - 在 TextView 中显示一个整数

Python:将数组转换为整数

cocoa - 哪个是 isnan() 的 Swift 等价物?

ios - Swift/传输 objective-c 代码/在for循环中迭代/类型XY没有下标成员

java - 将 Set<String> 的内容放入单个字符串的最快方法,其中单词用空格分隔?

c - 为什么这个程序没有给出预期的输出?

ios - 下载时如何处理iOS应用程序 sleep 后崩溃?