var arr1: Array = [34, 8.7, "hello"]
var arr2: Array<Any> = [34, 8.7, "hello"]
println(arr1)
println(arr2)
[34,8.699999999999999,你好] [34,8.7,你好]
不同的结果,任何人都可以解释一下吗?
答案 0 :(得分:4)
如果是arr1
,由于您没有指定类型并且已导入Foundation
,因此Swift创建了数组类型[NSObject]
。然后,34
,8.7
和"hello"
的类型分别为NSNumber
,NSNumber
和NSString
。
无论出于何种原因,值为NSNumber
的{{1}}打印为8.7
。试试这是一个游乐场:
8.699999999999999
在var a: NSNumber = 8.7
println(a) // prints 8.699999999999999
中,值包含arr2
,Int
和Double
类型,因此String
按照您的预期打印:
8.7
Matt Gibson在评论中说:
输出差异可能是因为NSNumber的描述方法 将数字格式化为&#34;%0.16g&#34 ;;如果你做NSString(格式:&#34;%0.16g&#34;, 8.7)给你&#34; 8.699999999999999&#34;。我确定他们只是同一个双重&#34;在&#34;下面。#/ p>
为了测试它们在下面是相同数字的理论,我做了:
var b: Double = 8.7
println(b) // prints 8.7
这确实打印了if (arr1[1] as NSNumber).doubleValue == (arr2[1] as Double) {
println("same")
}
。