Swift中的CGFloat打印
我正在尝试熟悉Swift并测试一些东西 有件奇怪的事我不明白Swift中的CGFloat打印,swift,Swift,我正在尝试熟悉Swift并测试一些东西 有件奇怪的事我不明白 var count : NSInteger = 19 var percent : CGFloat = 22.01 var random : NSInteger = NSInteger(percent) NSLog("%d, %f, %d", count, percent, random); println("\(count), \(percent), \(random)") 它应该打印19,22.01,22,但日志是 1
var count : NSInteger = 19
var percent : CGFloat = 22.01
var random : NSInteger = NSInteger(percent)
NSLog("%d, %f, %d", count, percent, random);
println("\(count), \(percent), \(random)")
它应该打印19,22.01,22,但日志是
19, 0.000000, 33875549
19, 22.0100002288818, 22
这里怎么了?在我删除类型说明符后,它在println
中可以正常工作,而不是在NSLog
中
知道为什么日志不正确吗
已添加
那println呢?使用
\()
无法打印22.01?我猜您是在为32位iOS编译,其中CGFloat
是32位float
最接近22.01的浮点值正好是22.0100002288818359375
最接近22.01的64位double
正好是22.010000000000001563194018672220408916473388671875
看起来,Swift字符串插值将double
转换为最短的字符串,该字符串将转换回完全相同的double
。它将float
转换为double
(额外的位为零),然后将double
转换为字符串,就好像一开始就给了它一个double
转换回双精度(22.010000000000001563194018672220408916473388671875)的最短字符串是22.01
。但是转换回双精度(22.0100002288818359375)
的最短字符串是22.0100002288818
,我猜您是为32位iOS编译的,CGFloat
是32位浮点
最接近22.01的浮点值正好是22.0100002288818359375
最接近22.01的64位double
正好是22.010000000000001563194018672220408916473388671875
看起来,Swift字符串插值将double
转换为最短的字符串,该字符串将转换回完全相同的double
。它将float
转换为double
(额外的位为零),然后将double
转换为字符串,就好像一开始就给了它一个double
转换回双精度(22.010000000000001563194018672220408916473388671875)的最短字符串是22.01
。但是转换回双精度(22.0100002288818359375)
的最短字符串是22.0100002288818
CGfloat很奇怪,因为它们可以是32位或64位,具体取决于系统。似乎NSLog与他们有问题。如果将百分比显式输入为浮点或双精度,它将正常工作。还可以使用cgfloat.native获取本机类型
NSLog("%d, %f, %d", count, percent.native, random);
CGfloat很奇怪,因为它们可以是32位或64位,具体取决于系统。似乎NSLog与他们有问题。如果将百分比显式输入为浮点或双精度,它将正常工作。还可以使用cgfloat.native获取本机类型
NSLog("%d, %f, %d", count, percent.native, random);
对CGFloat
使用%@
,它可以正常工作:
NSLog("%d, %@, %d", count, percent, random);
这是因为您可以在CGFloat上调用.description
对CGFloat
使用%@
,它可以正常工作:
NSLog("%d, %@, %d", count, percent, random);
这是因为您可以在CGFloat
上调用.description