字符串插值中是否有 Swift 6 数字格式化而无需“导入基础”?

问题描述 投票:0回答:1

我喜欢能够做到这一点:

print( "\("YYYY") \(454.90008)" ) 

:但我想这样做:

print( "\("YYYY") \(String(format: "%.3f", 454.90008))" ) 

:只能用

import Foundation

进行编译

这是正确的还是有一些不需要 Foundation 的 Swift 6 数字精度格式?

swift linux number-formatting string-interpolation foundation
1个回答
0
投票

不是,如果不导入就无法进行精确格式化

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
 }
© www.soinside.com 2019 - 2024. All rights reserved.