【问题标题】:UILabel to show 1k for int value 1000 and 2k for 2000 and so onUILabel 为 int 值 1000 显示 1k,为 2000 显示 2k 等等
【发布时间】:2015-09-17 07:49:39
【问题描述】:

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

【问题讨论】:

  • @Wain:我尝试使用 NSNumberFormatter 但徒劳无功。
  • 2345 你想要什么? 2.3 K 还是 2K 还是 2.345K?
  • @MugheesMusaddiq :发布您尝试过的内容...
  • @Fahim:2345应该是2.3K
  • @Fahim:让我检查一下。

标签: ios iphone uilabel nsnumberformatter


【解决方案1】:

这个怎么样?

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

【讨论】:

  • 这对格式化本身来说还不错。但在数字和 K 之间创建一个空白。
  • 如果要四舍五入到小数点后一位。你可以使用:round(10 * myNum) / 10
  • @HermannKlecker : creates a blank between the number and the K 你在谈论空间吗?
  • 小数呢,比如12,怎么显示?
  • @Thomas : 老板,如果你开始检查一切,那么我必须添加检查这是否是整数,那么它应该大于 999,然后是四舍五入,什么不是......对吗?这里我们不回答详细回答有了我的回答,OP 得到了他想要的。
【解决方案2】:

有两种方法,甚至三种。

第一 在设置标签中的值之前以编程方式执行此操作。

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

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

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

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

【讨论】:

    【解决方案3】:

    允许将数字格式化为单词的扩展 -> 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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-29
      • 2012-02-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-29
      相关资源
      最近更新 更多