我在操场上有以下内容:
let a:CGFloat = 1.23
let b:Double = 3.45
let c:Float = 6.78
String(format: "(%2.2f|%2.2f|%2.2f)",a,b,c) // prints "(3.45|6.78|0.00)"
let d = NSMakePoint(9.87,6.54)
String(format: "(%2.2f|%2.2f)",d.x,d.y) // prints "(0.00|0.00)"
为什么c:Float
呈现为0.00
。我可能需要除了f
以外的其他东西(关于这种格式化功能的苹果文档是 - 礼貌 - 相当薄,随着时间的推移为零)。
但是:当CGFloat
中的两个CGFloat
呈现为NSPoint
时,为什么第一个地方的0.00
正确呈现?
不,它不是Precision String Format Specifier In Swift及其吊坠的副本。
P.S。
String(format: "(%2.2f|%2.2f)",Double(d.x),d.y) // prints "(9.87|0.00)"
这是一个解决方法,但没有解释。
还有一个PPS:Isn' t %2.2f
应打印" 9.87"而不是" 9.87" (前导数字有2个位置?似乎忽略了数字。指定%02.2f
也打印" 9.87"而不是" 09.87"
答案 0 :(得分:1)
CGFloat不是float或double,它是自己的struct。如果你想要CGFloat的double或float值(取决于体系结构为32或64但是,你可以用a.native访问它。换句话说,试试:
String(format: "(%2.2f|%2.2f|%2.2f)",a.native,b,c)
如果您尝试将其他非浮点或非双精度参数传递给%f格式化程序,则会看到类似的行为。例如:
var str = "Hello, playground"
String(format: "%2.2f|%2.2f|%2.2f", arguments: [str,b,c])
会产生“3.45 | 6.78 | 0.00”。它似乎在你的参数中寻找另一个浮点数来满足最后的%f,默认为0.00
至于PPS。 %2.2F是小数点后两位,总数至少为2位。如果你想在小数点前最少两位数,你需要%5.2f
。 5因为小数本身就占了一席之地。