2016-10-08 43 views
0

我想在我的应用程序中显示一个数字,并保持它漂亮,显示前导零以使布局更均匀。在字符串中添加并格式化前导零0

例如

000 500/500 000 
001 000/500 000 
100 350/500 000 

我得到的第一个数字从一个Int,我想它格式化为一个字符串。 有没有一种方法可以确保一个数字总是六位数字,并且还可以得到前导零的范围来以不同的方式对它们进行格式化?

+1

使用'NSNumberFormatter'。 – rmaddy

+0

@MartinR理解这是为什么我的第一个评论是使用“NSNumberFormatter”,因此数字看起来对于给定的语言环境是正确的。 – rmaddy

+0

3位数分隔符是否被本地化为空格?或有意在场所单独选择?仅仅遵循语言环境可能不是OP所要求的。 – OOPer

回答

1

这个怎么样?

字符串扩展:

extension String { 
    func substring(startIndex: Int, length: Int) -> String { 
     let start = self.startIndex.advancedBy(startIndex) 
     let end = self.startIndex.advancedBy(startIndex + length) 
     return self[start..<end] 
    } 
} 

用法:

var a = 500 
var s = "000000\(a)" 
print(s.substring(s.characters.count - 6, length: 6)) 

a = 500000 
s = "000000\(a)" 
print(s.substring(s.characters.count - 6, length: 6)) 

a = 50 
s = "000000\(a)" 
print(s.substring(s.characters.count - 6, length: 6)) 
+0

如何在Swift 3中使用advancedBy? –

+0

查看swift 3移植指南https://swift.org/migration-guide/。有一章描述了如何在swift中迁移'advancedBy'。尝试'myCollection.index(myIndex,offsetBy:...)' – Enix

+0

@Enix很好的解决方案,让你度过我的一天! –

1

NSNumberFormatter有你需要的一切:

let formatter = NumberFormatter() 
formatter.minimumIntegerDigits = 6 
formatter.numberStyle = .decimal 

print(formatter.string(from: 500)!) 
print(formatter.string(from: 1000)!) 
print(formatter.string(from: 100_350)!) 
+0

请勿设置特定分隔符。保持语言环境的默认值,以便每个用户都能看到正确的格式,但前导零。 – rmaddy

+0

此外,NumberFormatter没有1000Separator属性。 –

+0

我使用的是OS X SDK,所以'000Separator'仍然存在。没有意识到这是旧的(10.4之前的)做事方式。改用'groupingSeparator' –

相关问题