我喜欢能够做到这一点:
print( "\("YYYY") \(454.90008)" )
:但我想这样做:
print( "\("YYYY") \(String(format: "%.3f", 454.90008))" )
:只能用
import Foundation
进行编译
这是正确的还是有一些不需要 Foundation 的 Swift 6 数字精度格式?
不是,如果不导入就无法进行精确格式化
Foundation
。但您可以创建自定义实现:
extension String {
init(_ formatting: Double, precision: Int) {
let string = String(formatting)
precondition(precision >= 0, "Precision must be a positive number")
let firstHalf = string.prefix { $0 != "." }
var secondHalf = string
.drop { $0 != "." }
.prefix(precision + 1)
secondHalf.popFirst()
self.init(stringLiteral: firstHalf + (secondHalf.isEmpty ? "" : ".") + secondHalf)
}
}
我使用前提条件来防止负数。即使您不在那里放置前提条件,它也会崩溃。但您也可以根据您的实现通过保护声明提前退出。
guard precision >= 0 else {
self.init(stringLiteral: "")
return
}