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

25

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

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

但是在Swift中如何完成这个操作呢? 而且在Swift中如何转义其他字符在println中?

下面是一个常规的Swift println语句:

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

那么如何限制小数位数?

另外,在 println 中如何转义双引号?


可能是将Double格式化为字符串的重复问题。 - Jukka Suomela
4个回答

28

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

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

它就像是 NSString 的 stringWithFormat 的 Swift 版本。


3
println在2.0版本被移除,请使用print代替。 - LiangWang

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")

4
与在 Objective-C 中使用 %.2f 相比,这似乎需要做很多工作。 - wigging
是的,我同意。肯定有更有效率的方法,比如使用扩展程序,但仍然很混乱。 - Dash
同意。一定有一种更简单的基本格式字符串方法。 - uchuugaka
由于Swift仍处于测试版阶段,可能尚未实现内联字符串格式化程序。 - wigging
\() 符号字面上访问其中的值的描述属性。能够包含其他格式化参数会很酷,但目前至少需要手动完成。 - Dash

8

Println()已被弃用。

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

打印(NSString(format:"平均温度 = %.2f", avgTemp))) // 平均温度 = 66.84 avgTemp = 66.846322156


你必须在“(round(avgTemp100)/100)”之前加上斜杠(\)才能使其正常工作。就像这样:<code>print("average temp. = \(round(avgTemp100)/100)")</code> - Demilitarized Zone

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)")

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接