在我的情况下,我有昏迷的字符串。
var stringWithComa = "1,2"
当我尝试将其转换为Float
或Double
时,我会按预期收到nil
。
Float(stringWithComa)//nil
Double(stringWithComa)//nil
但当我Decimal(string: stringWithComa)
时,我会收到1
。
为什么会出现这个问题?
答案 0 :(得分:1)
swift中的Decimal(string:String)构造函数将继续解析提供的字符串。如果找到任何无法评估的无效字符,它将停止解析。
一些例子 -
十进制(字符串:" 34234.43423.4343")=> " 34234.43423"
十进制(字符串:"#343.43")=>零
答案 1 :(得分:1)
使用Decimal(string:locale:)
解析包含本地化的字符串
数。例如:
print(Locale.current.decimalSeparator!) // ","
let stringWithComma = "1,2"
if let dec = Decimal(string: stringWithComma, locale: .current) {
print(dec) // 1.2
}
否则,逗号被视为无效字符。
与Float
和Double
初始值设定项相反,前导空格
并且尾随“垃圾”被忽略。转换成功至少是成功的
找到一个有效字符:
print(Decimal(string: " 1.23")) // Optional(1.23)
print(Decimal(string: "")) // nil