【问题标题】:Add and format leading zero's in a string [duplicate]在字符串中添加和格式化前导零[重复]
【发布时间】:2016-10-08 15:56:16
【问题描述】:

我想在我的应用程序中显示一个数字,并保持它的美观,显示前导零以使布局均匀。

例如

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

我从一个 Int 中得到第一个数字,我想把它格式化成一个字符串。 有没有一种简洁的方法可以确保一个数字始终是六位数,并且还可以获得前导零的范围来以不同的方式格式化它们?

【问题讨论】:

  • 使用NSNumberFormatter
  • @MartinR 明白了,这就是为什么我的第一条评论是使用NSNumberFormatter,所以对于给定的语言环境,这个数字看起来是正确的。
  • 3 位分隔符本地化为空格?还是故意在语言环境中独立选择?仅遵循语言环境可能不是 OP 所要求的。
  • @OOPer 这可以通过正确设置NSNumberFormatter来处理。
  • @rmaddy,那么你坚持所有与NSNumberFormatter 相关的问题都需要放在一个线程中?

标签: swift nsattributedstring


【解决方案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)!)

【讨论】:

  • 不要设置特定的分隔符。保留区域设置的默认值,以便每个用户都能看到正确的格式,但带有前导零。
  • 另外,NumberFormatter 没有千位分隔符属性..
  • 我正在使用 OS X SDK,所以thousandSeparator 仍然存在。没有意识到这是旧的(10.4 之前的)做事方式。请改用groupingSeparator
【解决方案2】:

这个怎么样?

字符串扩展:

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

【讨论】:

  • 如何在 Swift 3 中使用 advancedBy?
  • 查看 swift 3 迁移指南,swift.org/migration-guide。 swift 3中有一个章节描述了如何迁移advancedBy,试试myCollection.index(myIndex, offsetBy: …)
  • @Enix 很好的解决方案,你让我开心!
猜你喜欢
  • 2016-08-25
  • 1970-01-01
  • 2012-02-06
  • 2016-02-12
  • 2017-08-12
  • 1970-01-01
  • 2010-12-14
  • 1970-01-01
相关资源
最近更新 更多