【问题标题】:Non-Symbolic String to Int or Double in Swift在 Swift 中将非符号字符串转换为 Int 或 Double
【发布时间】:2014-11-18 03:00:01
【问题描述】:

显然,swift 没有 Isnumber() 函数。我知道整数是 string.toInt()。但是双倍呢? 我还发现有人写了一个 toDouble() 但它没有编译(NSNumber?没有一个名为 doubleValue 的成员)我猜是因为不支持可选类型?

extension String {
  func toDouble() -> Double? {
    var formatter = NSNumberFormatter()
    let number = formatter.numberFromString(self)
    if number == nil {
        return nil
      }
    return number.doubleValue
    }
}

来源:https://gist.github.com/rhult/5f26d69939214d5f2a3f

【问题讨论】:

  • 您是否要检查 String 是否为数字,或者任何类型的变量是否为数字?

标签: swift char int double type-conversion


【解决方案1】:

您可以使用is 运算符。

if number is Double{
    //do double thinks
}

【讨论】:

  • 我认为这不适用于字符串类型,但感谢您的输入
【解决方案2】:

你快到了——NSNumberFormatter 返回一个可选的NSNumber,它有一个doubleValue 属性。你只需要正确解开NSNumber

extension String {
    func toDouble() -> Double? {
        enum F {
            static let formatter = NSNumberFormatter()
        }
        if let number = F.formatter.numberFromString(self) {
            return number.doubleValue
        }
        return nil
    }
}


"12.345".toDouble()    // 12.345
"12345".toDouble()     // 12345.0
"asdf".toDouble()      // nil

【讨论】:

  • @ericgu 你的意思是它不适用于像"$20.00" 这样的字符串吗?这可能是一个完全不同的问题。
  • 是的。我认为这是可能的,但人们应该知道你的答案限制。
猜你喜欢
  • 1970-01-01
  • 2013-03-02
  • 1970-01-01
  • 2015-07-04
  • 1970-01-01
  • 2015-10-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多