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

时间:2015-04-18 00:59:11

标签: swift text

我有很多非常类似的代码。

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

我在标签中显示数字的位置。这段代码工作正常。我想知道如何强制显示的数字总是有一个正好2位小数的值。请只是快速的代码。谢谢

3 个答案:

答案 0 :(得分:4)

您可以使用swift中的NSString方法:

GrossTotal.text = NSString(format: "%.2f", gt") as String
编辑:我有一个" @"在字符串前面,这是一种Objective-C习惯。

答案 1 :(得分:3)

更新: Xcode 7.1•Swift 2.1

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

extension Double {
    struct Number { static let formatter = NSNumberFormatter() }
    func fratcionDigitis(n: Int, roundingMode: NSNumberFormatterRoundingMode) -> String {
        Number.formatter.roundingMode = roundingMode
        Number.formatter.maximumFractionDigits = n
        Number.formatter.minimumFractionDigits = n
        return Number.formatter.stringFromNumber(self) ?? ""
    }
}

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 roundDown = gt.fratcionDigitis(2, roundingMode: .RoundDown) // "19.49"
let roundUp = gt.fratcionDigitis(2, roundingMode: .RoundUp)     // "19.50"

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

String(format: "%.2f", 2.0)

答案 2 :(得分:0)

您可以为此创建漂亮的扩展程序:

使用:GrossTotal.text = gt.format(2)

扩展:

extension Double { // Same as Float64
    func format(f: Int) -> String {
        return String(format: "%.\(f)f", self)
    }
}

如果您希望将值保留为Float64而不是字符串,则还可以将其添加到您的扩展程序中:

func roundTo(numDigits: Int) -> Double {
    let power = pow(10.0, Double(numDigits))
    return round(self * power) / power
}

使用:gt.roundTo(2)返回Double / Float64相同的类型。

相关问题