在Apple的一个示例代码中,我看到了以下几行:
int digits = MAX( 0, 2 + floor( log10( newDurationSeconds)));
self.exposureDurationValueLabel.text = [NSString stringWithFormat:@"1/%.*f", digits, 1/newDurationSeconds];
我无法理解语法,stringWithFormat:
有两个参数,但只有一个%
符号。我知道它是1/newDurationSeconds
的字符串值,直到N=digits
,但是语法是我所不懂的。
如何将其翻译成Swift 3
发布于 2017-04-19 09:42:11
第一个参数提供所需的十进制数,由*
表示,第二个值是数字。
在Swift中
String(format: "1/%.*f", digits, 1/newDurationSeconds)
注:此功能由基金会框架提供。您必须使用import Foundation
(或import UIKit
或import Cocoa
)才能使其工作。
您可以找到格式字符串这里(苹果的文档)和这里(IEEE打印规范)的文档。
在第二份文件中,*
被解释为:
字段宽度或精度,或两者都可用星号( '*‘)表示。在这种情况下,int类型的参数提供字段宽度或精度。
发布于 2017-04-19 10:45:27
您可以使用NumberFormatter代替C样式的格式字符串;它通常更清晰,虽然更长:
let newDurationSeconds = Double(10.7)
let digits = max(0,2 + (log10(newDurationSeconds).rounded(.towardZero)))
let formatter = NumberFormatter()
formatter.maximumFractionDigits = Int(digits)
let s = formatter.string(from: NSNumber(value: newDurationSeconds))
https://stackoverflow.com/questions/43491799
复制相似问题