use*_*074 9 formatting numbers swift
我刚刚开始了解Swift,但我在极端基本级别的数字格式问题上存在严重问题.
例如,我需要显示一个至少有2位数的整数(例如00,01,02,03,04,05 ......).我期望的正常语法是这样的:
println("%02i%02i%02i",var1,var2,var3);
...但我没有找到任何有关如何在Swift中实现此目的的明确指示.我发现很难相信我需要创建一个自定义函数来做到这一点.将float或double值返回到固定的小数位数相同.
我发现了几个类似问题的链接(Swift中的精确字符串格式说明符以及如何在Swift 中使用println来格式化数字)但它们似乎混合了目标C甚至谈论Python和使用统一库.这种基本编程需求没有Swift解决方案吗?在Swift中完全忽略了一些如此根本的东西,这是真的吗?
Ant*_*nio 12
您可以使用此构造函数构造具有类c格式的字符串:
String(format: String, arguments:[CVarArgType])
Run Code Online (Sandbox Code Playgroud)
样品用法:
var x = 10
println(String(format: "%04d", arguments: [x])) // This will print "0010"
Run Code Online (Sandbox Code Playgroud)
如果您要使用它很多,并且想要一个更紧凑的表单,您可以实现这样的扩展:
extension String {
func format(arguments: [CVarArgType]) -> String {
return String(format: self, arguments: arguments)
}
}
Run Code Online (Sandbox Code Playgroud)
允许简化其用法,如下例所示:
"%d apples cost $%03.2f".format([4, 4 * 0.33])
Run Code Online (Sandbox Code Playgroud)
这是该问题的 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"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8824 次 |
| 最近记录: |