NSNumberFormatter SpellOutStyle与"和"

时间:2016-05-26 19:32:44

标签: ios swift nsnumberformatter

是否有类似于SpellOutStyle的NSNumberFormatter"和" 我试图解决Project Euler#17,它要求用"和#34;

写出数字

例如,556将是五百五十六

使用NSNumberFormatter,我有以下代码

let formatter = NSNumberFormatter()
formatter.numberStyle = NSNumberFormatterStyle.SpellOutStyle
let number = formatter.stringFromNumber(556)!
print(number) //prints five hundred fifty-six

NSNumberFormatterStyle.SpellOutStyle没有列出"和"。 我可以使用不同的方法来打印"和"?

1 个答案:

答案 0 :(得分:1)

<5>“五百五十六”是我耳中的英语。但是,没有NSNumberFormatter将返回该结果的语言环境。您可以通过继承NSNumberFormatter

来自行推广
class MyNumberFormatter: NSNumberFormatter {
    override init() {
        super.init()
        self.numberStyle = .SpellOutStyle
    }

    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
    }

    override func stringFromNumber(number: NSNumber) -> String? {
        // Make sure the number is an integer. Otherwise use NSNumberFormatter default formatting
        guard ceil(number.doubleValue) == floor(number.doubleValue) else {
            return super.stringFromNumber(number)
        }

        switch (number.integerValue - (number.integerValue % 100), abs(number.integerValue % 100)) {
        case let (bigUnit, smallUnit) where abs(bigUnit) >= 100 && 0 < smallUnit && smallUnit < 100:
            return super.stringFromNumber(bigUnit)! + " and " + super.stringFromNumber(smallUnit)!
        default:
            return super.stringFromNumber(number)
        }
    }
}

// Usage:
let formatter = MyNumberFormatter()
print(formatter.stringFromNumber(556)!)

显然,这仅适用于整数和英语语言环境。