先上代码
extension String {
func double() -> Double? {
guard count > 0 else { return nil }
let returnValue:Double? = Double(self)
if let returnValue = returnValue {
return returnValue
} else {
if contains(",") {
let newString = replacingOccurrences(of: ",", with: ".")
return Double(newString)
} else if contains(".") {
let newString = replacingOccurrences(of: ".", with: ",")
return Double(newString)
}
return nil
}
}
}
正常我们 String 转 Double 直接就 Double("4.5")
就 ok 了, 而且看起来也没有任何问题,但是小数点,这个符号不仅仅是使用 .
, 国际上使用阿拉伯数字国家与地区主要采用两种小数点符号:“句点”和“逗号”。汉语地区和大多的英语地区都使用“句点”,但是大多的其他欧洲国家和其前殖民地都使用“逗号”。
这段文字摘抄上面的小数点wiki,也就是说,一些欧洲国家是这样表示的 5,4
,所以当你手机语言切换到以逗号为小数点的国家时,Double("4.5")
就返回 nil
了,所以再看上面那部分代码,如果是正常可以转数字的字符串就直接转了,否则做下面处理。
网友评论