【问题标题】:Get a Decimal from a String从字符串中获取小数
【发布时间】:2017-05-02 21:53:49
【问题描述】:

我在此处获取小数时遇到问题。 我试过这段代码,但结果是 9.0 ,我怎样才能得到 0.9 ?

let distances = "0.9 mil"    
let stratr = distances.characters.split{$0 == " "}.map(String.init)
                for item in stratr {
                    let components = item.components(separatedBy: NSCharacterSet.decimalDigits.inverted)
                    let part = components.joined(separator: "")

                    if let doubVal = Double(part) {
                        print("this is a number -> \(doubVal)")
                    }

【问题讨论】:

    标签: swift string integer decimal


    【解决方案1】:

    您可以通过空格字符分隔字符串,然后使用第一个组件初始化一个浮点数。

    let str = "0.9 mil"
    let decimal = str.components(separatedBy: " ").first.flatMap { Float($0) }
    
    print(decimal) // 0.9
    

    【讨论】:

    • 这很容易使用,而且比我的@Callam 更好
    【解决方案2】:

    String 结构提供了一个实例方法,可用于根据给定的CharacterSet 删除字符。在这种情况下,您可以使用letterswhitespaces 字符集来隔离您的十进制值,然后从中创建一个Decimal

    let distances = "0.9 mil"
    
    let decimal = Decimal(string: distances.trimmingCharacters(in: CharacterSet.letters.union(.whitespaces)))
    
    if let decimal = decimal {
        print(decimal) // Prints 0.9
    }
    

    【讨论】:

      【解决方案3】:
      extension String {
          /// "0.9 mil" => "0.9"
          var decimals: String {
              return trimmingCharacters(in: CharacterSet.decimalDigits.inverted)
          }
      
          /// "0.9" => 0.9
          var doubleValue: Double {
              return Double(self) ?? 0
          }
      }
      

      用法:

      let distance = "0.9 mil"
      print(distance.decimals) // "0.9"
      print(distance.decimals.doubleValue) // 0.9
      print(distance.doubleValue) // 0 (because Double("0.9 mil") => nil)
      

      【讨论】:

        【解决方案4】:

        没关系,我找到答案了

        let distances = "0.9 mil"    
        let stratr = distances.characters.split{$0 == " "}.map(String.init)
                    for item in stratr {
                        let components = item.components(separatedBy: NSCharacterSet.decimalDigits.inverted)
                        let part = components.joined(separator: ".")
        
                        if let doubVal = Double(part) {
                            print("this is a number -> \(doubVal)")
                        }
        

        我想当我设置 Joined(separator : ".") 时,它会用一个 "." 加入字符串。作为分隔符

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-08-09
          • 1970-01-01
          • 2018-10-08
          • 2012-11-01
          相关资源
          最近更新 更多