代码之家  ›  专栏  ›  技术社区  ›  J. Doe

在达到最大值后自动添加加号

  •  2
  • J. Doe  · 技术社区  · 7 年前

    NumberFormatter (或任何其他内置类/结构)将在达到某个最大值后返回一个本地化的加号?我试过这个:

    let numberFormatter = NumberFormatter()
    
    numberFormatter.maximum = 9
    
    print(numberFormatter.string(from: 10))
    

    但它只是回来了 "10" "9+" (因为我的本地化设置为英语,所以+在这里是加号,加在9之后,因为我们从左到右阅读)。是否可以使用现有的类/结构(我认为 数字格式化 可以做这项工作),可以处理加号内置的本地化?在另一种语言中,加号是不同的,甚至可能在数字前面。

    我不想手动添加加号。

    数字格式化 https://developer.apple.com/documentation/foundation/numberformatter/1416423-plussign

    3 回复  |  直到 7 年前
        1
  •  0
  •   ielyamani    7 年前

    下面是一个解决方案,根据当前语言环境的语言方向,将加号放置在数字的右侧或左侧:

    func format(number: Double, limit: Double) -> String {
    
        if let languageCode = Locale.current.languageCode, number > limit {
            let direction = Locale.characterDirection(forLanguage: languageCode)
            if direction == .leftToRight {
                return "\(limit)" + NumberFormatter().plusSign
            } else {
                return NumberFormatter().plusSign + "\(limit)"
            }
        } else {
            return "\(number)"
        }
    }
    
    format(number: 10, limit: 9)  //"9.0+"
    
        2
  •  -1
  •   claude31    7 年前

    这是有效的,即使可能不是你要找的。

    let numberFormatter = NumberFormatter()
    
    numberFormatter.maximum = 9
    
    func formatMax(_ s: Int) -> String {
            if numberFormatter.number(from: String(s)) == nil {
                return "\(numberFormatter.maximum!)" + "+"
            } else {
                return String(s)
            }
    }
    
    print(formatMax(11))
    
        3
  •  -2
  •   Chris    7 年前

    这不是NumberFormatter的工作,但这里有一个简单的函数可以帮您完成:

    func ffs(_ number:NSNumber) -> String{
        let max = 9
        if (Int(truncating: number) > max){
            return "\(max)+"} else {
            return "\(number)"
        }
    }