为什么Decimal from String返回值没有格式良好的输入?

时间:2018-02-22 09:35:24

标签: swift string decimal

在我的情况下,我有昏迷的字符串。

var stringWithComa = "1,2"

当我尝试将其转换为FloatDouble时,我会按预期收到nil

Float(stringWithComa)//nil

Double(stringWithComa)//nil

但当我Decimal(string: stringWithComa)时,我会收到1

为什么会出现这个问题?

2 个答案:

答案 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
}

否则,逗号被视为无效字符。 与FloatDouble初始值设定项相反,前导空格 并且尾随“垃圾”被忽略。转换成功至少是成功的 找到一个有效字符:

print(Decimal(string: "   1.23")) // Optional(1.23)
print(Decimal(string: "")) // nil