使用NSNumberFormatter SpellOutStyle限制小数位数

时间:2016-05-09 09:52:01

标签: swift number-formatting nsnumberformatter

我正在尝试为我的iOS应用创建有意义的辅助功能标签,并达到我认为是NSNumberFormatter的奇怪问题/限制。

import UIKit

let decimal = 171.8926
let formatter = NSNumberFormatter()
formatter.numberStyle = .DecimalStyle
formatter.maximumFractionDigits = 2
print(formatter.stringFromNumber(decimal)!)
// "171.89"

formatter.numberStyle = .SpellOutStyle
print(formatter.stringFromNumber(decimal)!)
// "one hundred seventy-one point eight nine two six\n"

似乎.SpellOutStyle由于某种原因不尊重maximumFractionDigits

我是否遗漏了某些东西,或者我是否需要像动物一样截断它们?

let truncDecimal = Double(Int(decimal * 100)) / 100.0
print(formatter.stringFromNumber(truncDecimal)!)
// "one hundred seventy-one point eight nine\n"

似乎很疯狂我可以使用格式化程序来删除数字而不是单词。

1 个答案:

答案 0 :(得分:1)

Swift NSNumberFormatter numberStyle SpellOutStyle为当前语言环境打印完整的数字。

要做你想做的事我建议你创建一个双扩展名:

extension Double {
    func roundToPlaces(places: Int) -> Double {
        let divisor = pow(10.0, Double(places))
        return round(self * divisor) / divisor
    }
}

然后你可以这样调用你的代码:

let decimal = 171.8976
let formatter = NSNumberFormatter()
formatter.numberStyle = .DecimalStyle
formatter.maximumFractionDigits = 2
print(formatter.stringFromNumber(decimal)!)
// "171.89"

formatter.numberStyle = .SpellOutStyle
print(formatter.stringFromNumber(decimal.roundToPlaces(2))!)
// "one hundred seventy-one point nine"