从字符串中获取十进制

时间:2016-12-17 05:21:18

标签: swift string integer decimal

我在这里得到一个Decimal有问题。 我试过这段代码但结果是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)")
                    }

3 个答案:

答案 0 :(得分:1)

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
}

答案 1 :(得分:0)

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

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

print(decimal) // 0.9

答案 2 :(得分:0)

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)