下面是我以前如何将一个浮点数截断到小数点后两位
NSLog(@" %.02f %.02f %.02f", r, g, b);
我查了文档和电子书,但还没找到答案。谢谢!
下面是我以前如何将一个浮点数截断到小数点后两位
NSLog(@" %.02f %.02f %.02f", r, g, b);
我查了文档和电子书,但还没找到答案。谢谢!
当前回答
上面有很多不错的答案,但有时模式比“%”更合适。3f“有点官样文章。以下是我在Swift 3中使用NumberFormatter的方法。
extension Double {
func format(_ pattern: String) -> String {
let formatter = NumberFormatter()
formatter.format = pattern
return formatter.string(from: NSNumber(value: self))!
}
}
let n1 = 0.350, n2 = 0.355
print(n1.format("0.00#")) // 0.35
print(n2.format("0.00#")) // 0.355
这里我希望总是显示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)"
}
}
iOS 15+版本推荐:
2.31234.formatted(.number.precision(.fractionLength(1)))
你仍然可以在Swift中使用NSLog,就像在Objective-C中一样,只是没有@符号。
NSLog("%.02f %.02f %.02f", r, g, b)
编辑:在与Swift合作一段时间后,我想添加这个变化
var r=1.2
var g=1.3
var b=1.4
NSLog("\(r) \(g) \(b)")
输出:
2014-12-07 21:00:42.128 MyApp[1626:60b] 1.2 1.3 1.4
我目前为止最好的解决方案,以下是David的回答:
import Foundation
extension Int {
func format(f: String) -> String {
return String(format: "%\(f)d", self)
}
}
extension Double {
func format(f: String) -> String {
return String(format: "%\(f)f", self)
}
}
let someInt = 4, someIntFormat = "03"
println("The integer number \(someInt) formatted with \"\(someIntFormat)\" looks like \(someInt.format(someIntFormat))")
// The integer number 4 formatted with "03" looks like 004
let someDouble = 3.14159265359, someDoubleFormat = ".3"
println("The floating point number \(someDouble) formatted with \"\(someDoubleFormat)\" looks like \(someDouble.format(someDoubleFormat))")
// The floating point number 3.14159265359 formatted with ".3" looks like 3.142
我认为这是最类似swift的解决方案,将格式化操作直接绑定到数据类型上。很可能在某个地方有一个内置的格式化操作库,或者它很快就会发布。请记住,该语言仍处于测试阶段。
import Foundation
extension CGFloat {
var string1: String {
return String(format: "%.1f", self)
}
var string2: String {
return String(format: "%.2f", self)
}
}
使用
let offset = CGPoint(1.23, 4.56)
print("offset: \(offset.x.string1) x \(offset.y.string1)")
// offset: 1.2 x 4.6