如何在Swift中使用println来格式化数字

时间:2014-06-08 03:47:18

标签: swift println nsformatter

在Objective-C中注销浮动时,您可以执行以下操作将输出限制为仅小数点后两位:

float avgTemp = 66.844322156
NSLog (@"average temp. = %.2f", avgTemp);

但是你如何在Swift中做到这一点? 你如何逃避Swift中println中的其他角色?

这是一个常规的Swift println声明:

println ("Avg. temp = \(avgTemp)")

那么如何限制小数位呢?

另外,你如何逃避println中的双引号?

4 个答案:

答案 0 :(得分:27)

这是我迄今为止找到的最短解决方案:

let avgTemp = 66.844322156
println(NSString(format:"%.2f", avgTemp))

它就像NSString的stringWithFormat

的快速版本

答案 1 :(得分:11)

可以使用NSNumberFormatter调整关于作为字符串的数字格式的所有内容:

let nf = NSNumberFormatter()
nf.numberStyle = NSNumberFormatterStyle.DecimalStyle
nf.maximumFractionDigits = 2
println(nf.stringFromNumber(0.33333)) // prints 0.33

您可以使用反斜杠

来转义引号
println("\"God is dead\" -Nietzsche")

答案 2 :(得分:7)

  

不推荐使用Println()。

 var avgTemp = 66.844322156
  print("average temp. = (round(avgTemp*100)/100)")   // average temp. = 66.84

//or

print(NSString(format:"average temp. = %.2f", avgTemp))) // average temp. = 66.84 avgTemp = 66.846322156

print(String(format:"average temp. = %.2f", avgTemp)) // average temp. = 66.85

答案 3 :(得分:0)

如果您需要经常以一定的精度打印浮点数,可以使用便捷方法扩展Float和Double。例如,对于2个有效数字精度:

// get Float or Double with 2 significant figure precision
var numberFormatter = NSNumberFormatter()
extension Float {
    var sf2:String {
        get {
            numberFormatter.numberStyle = NSNumberFormatterStyle.DecimalStyle
            numberFormatter.maximumSignificantDigits = 2
            return numberFormatter.stringFromNumber(self)!
        }
    }
}
extension Double {
    var sf2:String {
        get {
            numberFormatter.numberStyle = NSNumberFormatterStyle.DecimalStyle
            numberFormatter.maximumSignificantDigits = 2
            return numberFormatter.stringFromNumber(self)!
        }
    }
}

然后当你需要打印东西时:

let x = 5.23325
print("The value of x is \(x.sf2)")