比如说你有:
var possibleDouble = Double("0.")
possibleDouble
评估为Optional(0.0)
。
就我而言,"0."
不是有效的Double
,因此possibleDouble
应为nil
。是否有一种聪明的方法可以检查"0."
或此表单中的某些内容是不是有效的Double。
编辑:
有效数字(无论是Int
,Double
,Float
还是Decimal
)都可以是N.N或N格式,其中N是某个数字。期间之前和之后可以有一个或多个数字。
答案 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
:
String
的第一个字符不是"."
String
的最后一个字符不是"."
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")
}