如何检查字符串是否是Swift中的有效双精度

时间:2016-05-18 20:44:16

标签: string swift double

比如说你有:

var possibleDouble = Double("0.") 

possibleDouble评估为Optional(0.0)

就我而言,"0."不是有效的Double,因此possibleDouble应为nil。是否有一种聪明的方法可以检查"0."或此表单中的某些内容是不是有效的Double。

编辑: 有效数字(无论是IntDoubleFloat还是Decimal)都可以是N.N或N格式,其中N是某个数字。期间之前和之后可以有一个或多个数字。

4 个答案:

答案 0 :(得分:4)

您可以扩展Double添加新的自定义初始值设定项

extension Double {
    init?(myCustomFormat:String) {
        guard let
            standardDouble = Double(myCustomFormat),
            firstChar: Character? = myCustomFormat.characters.first,
            lastChar: Character? = myCustomFormat.characters.last
            where firstChar != "." && lastChar != "."
            else { return nil }
        self = standardDouble
    }
}

此初始化程序仅在以下情况下创建Double

  1. 构建的初始化程序确实成功,最后一个
  2. 输入String的第一个字符不是"."
  3. 输入String的最后一个字符不是"."
  4. 实施例

    Double(myCustomFormat:"1.") // nil
    Double(myCustomFormat:".1") // nil
    Double(myCustomFormat:"Hello") // nil
    Double(myCustomFormat:"1.1") // 1.1
    Double(myCustomFormat:"1") // 1
    

答案 1 :(得分:0)

我可能会使用正则表达式:

// optionally begin with a minus
let pattern = "^-?\\d+(?:.\\d+)?$"
let value = "10.0"

let validNumber = value.rangeOfString(pattern, options: [.RegularExpressionSearch]) != nil
print(validNumber)

如果要限制整数/小数位数,请将+替换为{1,x}模式,如果要限制有效位数,只需添加length项检查。

答案 2 :(得分:0)

Swift 3.0

func toDouble(inputString: String) -> Double? {
        return NumberFormatter().number(from: inputString)?.doubleValue
}

用法:

let myString = "3.0"

//if not a valid Double, return 0
print(toDouble(inputString: myString) ?? "0.0")

答案 3 :(得分:0)

我找到了最佳解决方案来检查string是否可以转换为给定类型。您也可以测试Int

if let number = Double("123") {
    print("\(number) is a valid double number")
} else {
    print("Not a valid double number")
}