Swift数字格式

时间:2014-10-02 18:45:08

标签: swift formatting numbers

我刚刚开始了解Swift,但我在极其基本的级别上遇到了严重的数字格式问题。

例如,我需要显示一个至少有2位数的整数(例如00,01,02,03,04,05 ......)。我期望的正常语法是:

println("%02i%02i%02i",var1,var2,var3);

...但我没有找到任何关于如何在Swift中实现这一目标的明确指示。我发现很难相信我需要创建一个自定义函数来做到这一点。将float或double值返回到固定的小数位数时也一样。

我找到了几个类似问题的链接(Precision String Format Specifier In Swift& How to use println in Swift to format number),但他们似乎混合了客观C,甚至谈论Python和使用统一库。这种基本编程需求没有Swift解决方案吗?在Swift中完全忽略了一些如此根本的东西,这是真的吗?

4 个答案:

答案 0 :(得分:11)

您可以使用此构造函数构造具有类C格式的字符串:

String(format: String, arguments:[CVarArgType])

样本用法:

var x = 10

println(String(format: "%04d", arguments: [x])) // This will print "0010"

如果您要使用它很多,并且想要一个更紧凑的表单,您可以实现这样的扩展:

extension String {
    func format(arguments: [CVarArgType]) -> String {
        return String(format: self, arguments: arguments)
    }
}

允许简化其用法,如下例所示:

"%d apples cost $%03.2f".format([4, 4 * 0.33])

答案 1 :(得分:1)

这是解决问题的POP解决方案:

protocol Formattable {
    func format(pattern: String) -> String
}
extension Formattable where Self: CVarArg {
    func format(pattern: String) -> String {
        return String(format: pattern, arguments: [self])
    }
}
extension Int: Formattable { }
extension Double: Formattable { }
extension Float: Formattable { }

let myInt = 10
let myDouble: Double = 0.01
let myFloat: Float = 1.11

print(myInt.format(pattern: "%04d"))      // "0010
print(myDouble.format(pattern: "%.2f"))   // "0.01"
print(myFloat.format(pattern: "$%03.2f")) // "$1.11"
print(100.format(pattern: "%05d"))        // "00100"

答案 2 :(得分:1)

我用“We< 3 Swift”学习了一个简单的解决方案,这很简单,你甚至可以在没有Foundation,round()或Strings的情况下使用,保持数值。

示例:

var number = 31.726354765
var intNumber = Int(number * 1000.0)
var roundedNumber = Double(intNumber) / 1000.0

结果:31.726

答案 3 :(得分:0)

你仍然可以使用好的NSLog("%。2f",myFloatOrDouble):D