String to Double 和前导空格
String to Double and leading whitespace
我在 Swift 标准库结构 Double() 中发现了奇怪的行为。此函数将表示数字的字符串转换为双精度数字。一切都很好。
我最近发现了前导白色 space 的奇怪行为,即如果单个空白字符 space 导致有效数字字符串,则转换失败:
示例(Xcode 调试器)
(lldb) po Double("11.8000")
▿ Optional<Double>
- some : 11.8
(lldb) po Double(" 11.8000")
nil
我还没有看到这个文档,所以我 post 在这里。
不雅的修复是:
let myNumber = Double(myString.trimmingCharacters(in: .whitespaces))
有更好的解决办法吗?我的意思是除了用 trim() 替换 trimmingCharacters(in: .whitespaces) 的简单字符串扩展。我认为 Double() 及其亲属应该能够在内部处理前导和尾随 spaces.
这已被完整记录。查看采用 StringProtocol
.
的 init
方法的文档
在所有示例的末尾,它指出:
Passing any other format or any additional characters as text
results in nil
. For example, the following conversions result in nil
:
Double(" 5.0") // Includes whitespace
所以您对 trim 转换前空格的解决方案是正确的。
我在 Swift 标准库结构 Double() 中发现了奇怪的行为。此函数将表示数字的字符串转换为双精度数字。一切都很好。
我最近发现了前导白色 space 的奇怪行为,即如果单个空白字符 space 导致有效数字字符串,则转换失败:
示例(Xcode 调试器)
(lldb) po Double("11.8000")
▿ Optional<Double>
- some : 11.8
(lldb) po Double(" 11.8000")
nil
我还没有看到这个文档,所以我 post 在这里。 不雅的修复是:
let myNumber = Double(myString.trimmingCharacters(in: .whitespaces))
有更好的解决办法吗?我的意思是除了用 trim() 替换 trimmingCharacters(in: .whitespaces) 的简单字符串扩展。我认为 Double() 及其亲属应该能够在内部处理前导和尾随 spaces.
这已被完整记录。查看采用 StringProtocol
.
init
方法的文档
在所有示例的末尾,它指出:
Passing any other format or any additional characters as
text
results innil
. For example, the following conversions result innil
:Double(" 5.0") // Includes whitespace
所以您对 trim 转换前空格的解决方案是正确的。