使用 swift 强制数字显示 2 个小数位

Ele*_*ger 3 text swift

我有很多与此非常相似的代码。

//Gross Total
    var gt:Float64 = tp01 + tp02 + tp03 + tp04 + tp05 + tat + ntat
    GrossTotal.text = "\(gt)"
Run Code Online (Sandbox Code Playgroud)

我在标签中显示数字的地方。这段代码工作正常。我想知道如何强制显示的数字始终具有精确到 2 个小数位的值。请只快速代码。谢谢你

Dun*_*n C 6

Swift String 类型有一个初始化器,它接受一个格式字符串: String(format:args:...)

您的代码可能如下所示: GrossTotal.text = String(format: "%.2f", gt)

编辑:我在字符串前面有一个“@”,这是 Objective-C 的习惯。编辑:输入错误已解决。


Leo*_*bus 5

更新:Xcode 10.2 • Swift 5

您可以使用 NumberFormatter 根据需要格式化字符串并将其向上或向下舍入,如下所示:

extension Formatter {
    static let number = NumberFormatter() 
}
Run Code Online (Sandbox Code Playgroud)
extension BinaryFloatingPoint {
    func fratcionDigitis(_ n: Int, roundingMode: NumberFormatter.RoundingMode = .halfEven) -> String {
        Formatter.number.roundingMode = roundingMode
        Formatter.number.maximumFractionDigits = n
        Formatter.number.minimumFractionDigits = n
        return Formatter.number.string(for: self) ?? ""
    }
}
Run Code Online (Sandbox Code Playgroud)
let tp01 = 3.3232
let tp02 = 1.5673
let tp03 = 1.9764
let tp04 = 2.0986
let tp05 = 5.5557
let tat  = 2.7448
let ntat = 2.2339

let gt: Float64 = tp01 + tp02 + tp03 + tp04 + tp05 + tat + ntat   // 19.4999

let rounded = gt.fratcionDigitis(2)                        // "19.50"
let roundDown = gt.fratcionDigitis(2, roundingMode: .down) // "19.49"
let roundUp = gt.fratcionDigitis(2, roundingMode: .up)     // "19.50"
Run Code Online (Sandbox Code Playgroud)

或者正如我在评论中提到的,你可以只使用 String(format:)

String(format: "%.2f", 2.0)
Run Code Online (Sandbox Code Playgroud)