【问题标题】: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
【解决方案2】:
String 结构提供了一个实例方法,可用于根据给定的CharacterSet 删除字符。在这种情况下,您可以使用letters 和whitespaces 字符集来隔离您的十进制值,然后从中创建一个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 : ".") 时,它会用一个 "." 加入字符串。作为分隔符