Arrays 混合元素的Swift数组,为什么返回不同的结果 var arr1:Array=[34,8.7,“你好”] var arr2:Array=[34,8.7,“hello”] println(arr1) println(arr2)

Arrays 混合元素的Swift数组,为什么返回不同的结果 var arr1:Array=[34,8.7,“你好”] var arr2:Array=[34,8.7,“hello”] println(arr1) println(arr2),arrays,swift,Arrays,Swift,[34,8.69999999999,你好] [34,8.7,你好] 不同的结果,任何人都可以解释?在arr1的情况下,由于您没有指定类型,并且导入了Foundation,Swift生成了数组类型[NSObject]。然后,34、8.7和“hello”的类型分别是NSNumber、NSNumber和NSString 无论出于何种原因,值为8.7的NSNumber打印为8.69999999999。试试这是一个游乐场: var arr1: Array = [34, 8.7, "hello"] var

[34,8.69999999999,你好] [34,8.7,你好]


不同的结果,任何人都可以解释?

arr1
的情况下,由于您没有指定类型,并且导入了
Foundation
,Swift生成了数组类型
[NSObject]
。然后,
34
8.7
“hello”
的类型分别是
NSNumber
NSNumber
NSString

无论出于何种原因,值为
8.7
NSNumber
打印为
8.69999999999
。试试这是一个游乐场:

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

println(arr1)
println(arr2)
arr2
中,值的类型为
Int
Double
String
,因此
8.7
按预期打印:

var a: NSNumber = 8.7
println(a)            // prints 8.699999999999999
正如马特·吉布森在评论中所说:

输出差异可能是因为NSNumber的描述方法 将数字格式设置为“%0.16g”;如果不使用NSString(格式:“%0.16g”, 8.7)给出“8.69999999999”。我敢肯定,他们两个都是同一个“下”字

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

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

arr1
的情况下,这确实会打印
“相同”

,因为您没有指定类型,并且导入了
Foundation
,所以Swift生成了数组类型
[NSObject]
。然后,
34
8.7
“hello”
的类型分别是
NSNumber
NSNumber
NSString

无论出于何种原因,值为
8.7
NSNumber
打印为
8.69999999999
。试试这是一个游乐场:

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

println(arr1)
println(arr2)
arr2
中,值的类型为
Int
Double
String
,因此
8.7
按预期打印:

var a: NSNumber = 8.7
println(a)            // prints 8.699999999999999
正如马特·吉布森在评论中所说:

输出差异可能是因为NSNumber的描述方法 将数字格式设置为“%0.16g”;如果不使用NSString(格式:“%0.16g”, 8.7)给出“8.69999999999”。我敢肯定,他们两个都是同一个“下”字

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

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

这确实会打印“相同的”

浮点精度。计算机只能以一定的精度表示数字。8.7和8.6999999999本质上是相同的,尽管我只能推测它们显示不同的原因。正如@vacawama所指出的,您可以将这个问题简化为“为什么
println(NSNumber(double:8.7))
println(double(8.7))
给出不同的结果?”浮点精度。计算机只能以一定的精度表示数字。8.7和8.6999999999本质上是相同的,尽管我只能推测它们显示不同的原因。正如@vacawama所指出的,您可以将这个问题简化为“为什么
println(NSNumber(double:8.7))
println(double(8.7))
给出不同的结果?”我认为输出差异可能是因为将数字格式化为“%0.16g”;如果您使用
NSString(格式:“%0.16g”,8.7)
将显示“8.69999999999”。我确信它们都是相同的双“下”字。我认为输出的差异可能是因为将数字格式化为“%0.16g”;如果您使用
NSString(格式:“%0.16g”,8.7)
将显示“8.69999999999”。我敢肯定,他们两个都是同一个“下”字。