下面是我以前如何将一个浮点数截断到小数点后两位

NSLog(@" %.02f %.02f %.02f", r, g, b);

我查了文档和电子书,但还没找到答案。谢谢!


当前回答

@Christian Dietrich):

而不是:

var k = 1.0
    for i in 1...right+1 {
        k = 10.0 * k
    }
let n = Double(Int(left*k)) / Double(k)
return "\(n)"

也可以是:

let k = pow(10.0, Double(right))
let n = Double(Int(left*k)) / k
return "\(n)"

(更正:) 抱歉混淆* -当然这适用于双打。我认为,最实用的(如果你想让数字四舍五入,而不是被切断)应该是这样的:

infix operator ~> {}
func ~> (left: Double, right: Int) -> Double {
    if right <= 0 {
        return round(left)
    }
    let k = pow(10.0, Double(right))
    return round(left*k) / k
}

仅对于Float,只需将Double替换为Float, pow替换为powf, round替换为roundf。 更新:我发现它是最实用的使用返回类型Double而不是字符串。它的工作原理与字符串输出相同,即:

println("Pi is roughly \(3.1415926 ~> 3)")

印花:圆周率大约是3.142 所以你可以用同样的方式使用它的字符串(你甚至可以写:println(d ~> 2)),但另外你也可以用它直接舍入值,即:

d = Double(slider.value) ~> 2

或者任何你需要的…

其他回答

Swift 4 Xcode 10更新

extension Double {
    var asNumber:String {
        if self >= 0 {
            let formatter = NumberFormatter()
            formatter.numberStyle = .none
            formatter.percentSymbol = ""
            formatter.maximumFractionDigits = 2
            return "\(formatter.string(from: NSNumber(value: self)) ?? "")"
        }
        return ""
    }
}

使用以下方法

let output = String.localizedStringWithFormat(" %.02f %.02f %.02f", r, g, b)

println(output)
extension Double {
  func formatWithDecimalPlaces(decimalPlaces: Int) -> Double {
     let formattedString = NSString(format: "%.\(decimalPlaces)f", self) as String
     return Double(formattedString)!
     }
 }

 1.3333.formatWithDecimalPlaces(2)

这里大多数答案都是有效的。但是,如果要经常格式化数字,可以考虑扩展Float类,添加一个返回格式化字符串的方法。参见下面的示例代码。这一个通过使用数字格式化器和扩展实现了相同的目标。

extension Float {
    func string(fractionDigits:Int) -> String {
        let formatter = NSNumberFormatter()
        formatter.minimumFractionDigits = fractionDigits
        formatter.maximumFractionDigits = fractionDigits
        return formatter.stringFromNumber(self) ?? "\(self)"
    }
}

let myVelocity:Float = 12.32982342034

println("The velocity is \(myVelocity.string(2))")
println("The velocity is \(myVelocity.string(1))")

控制台显示:

The velocity is 12.33
The velocity is 12.3

SWIFT 3.1更新

extension Float {
    func string(fractionDigits:Int) -> String {
        let formatter = NumberFormatter()
        formatter.minimumFractionDigits = fractionDigits
        formatter.maximumFractionDigits = fractionDigits
        return formatter.string(from: NSNumber(value: self)) ?? "\(self)"
    }
}

一个更优雅和通用的解决方案是重写ruby / python %操作符:

// Updated for beta 5
func %(format:String, args:[CVarArgType]) -> String {
    return NSString(format:format, arguments:getVaList(args))
}

"Hello %@, This is pi : %.2f" % ["World", M_PI]