Arrays 混合元素的Swift数组,为什么返回不同的结果 var arr1:Array=[34,8.7,“你好”] var arr2:Array=[34,8.7,“hello”] println(arr1) println(arr2)
[34,8.69999999999,你好] [34,8.7,你好]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
不同的结果,任何人都可以解释?在
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”。我敢肯定,他们两个都是同一个“下”字。