UILabel 显示 1k 表示 int 值 1000 和 2k 表示 2000 等等

UILabel to show 1k for int value 1000 and 2k for 2000 and so on

我有 UILabel,其中显示了 int 值,我希望如果值以千为单位,例如 1000,那么标签应该在 2000 年及以后显示 1k 和 2k。如何实现?

这个怎么样?

int myNum = 12345;
NSLog(@"%.1f K", myNum/1000);

有两种方法,甚至三种。

第一名 在标签中设置值之前,您可以通过编程方式执行此操作。

第二名 您通过 setter 为 int 值扩展 UILabel,该值执行格式化并设置适当的字符串值。

第三 您将 UILabel 子类化并为 int 值添加 setter 。这会进行格式化并设置适当的字符串。 扩展的工作量少一些,但子类化允许覆盖常规 setter 以便您可以抛出异常或任何您想要的。

这三者都有一个共同点:您必须以编程方式进行格式化。 (整数除以 1000,然后使用常规字符串格式)

扩展或继承 UILabel 使解决方案可重用。

允许将数字格式化为单词的扩展 -> 1.000 = 1K 1.500 -> 1.5K 1.000.000 -> 1M。 用法:myInt.abbreviateNumber()

extension Int {
    func abbreviateNumber() -> String {
        if self < 1000 {
            return "\(self)"
        }

        if self < 1000000 {
            var n = Double(self);
            n = Double( floor(n/100)/10 )
            return "\(n.description)K"
        }

        var n = Double(self)
        n = Double( floor(n/100000)/10 )
        return "\(n.description)M"
    }
}

来源:https://gist.github.com/Dfmarulanda/f575a7088811b6a0759a