arrays - 具有混合元素的Swift数组,为什么返回不同的结果

标签 arrays swift

var arr1: Array = [34, 8.7, "hello"]
var arr2: Array<Any> = [34, 8.7, "hello"]

println(arr1)
println(arr2)

[34, 8.699999999999999, hello] [34, 8.7, hello]

不同的结果,谁能解释一下?

最佳答案

arr1 的情况下,由于您没有指定类型并且您导入了 Foundation,Swift 将数组类型设为 [NSObject]。那么,348.7"hello"的类型分别是NSNumberNSNumberNSString 分别。

无论出于何种原因,值为 8.7NSNumber 打印为 8.699999999999999。试试这是一个 Playground :

var a: NSNumber = 8.7
println(a)            // prints 8.699999999999999

arr2 中,值的类型有 IntDoubleString,所以 8.7 按您的预期打印:

var b: Double = 8.7
println(b)           // prints 8.7

正如马特·吉布森 (Matt Gibson) 在评论中所说:

the output difference may be because NSNumber's description method formats the number as "%0.16g"; if you do NSString(format: "%0.16g", 8.7) gives you "8.699999999999999". I'm sure they're both just the same double "underneath".

为了验证它们在下面是相同数字的理论,我做了:

if (arr1[1] as NSNumber).doubleValue == (arr2[1] as Double) {
    println("same")
}

这确实打印了"same"

关于arrays - 具有混合元素的Swift数组,为什么返回不同的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25892203/

相关文章:

javascript - 获取数组的值

javascript - 将对象作为数组的数组进行垃圾收集

ios - Collection View 的自定义布局不会更新

swift - 以编程方式使用 SKReferenceNode 时出现问题

ios - 如何在 Swift 中合并多个数组?

objective-c - 如何聚焦 Collection View 可见单元格的最后一个单元格?

php - 我怎样才能简化这个数组?

将数组转换为 memcpy 的指针

java - 使用 Arrays.toString() 输出数组元素

ios - 如何在 swift 中从选定的 tableviewcell 中过滤数组?