NumberFormatter RoundingMode具有不寻常的圆形

时间:2017-06-20 18:39:28

标签: swift

制作我自己的格式化程序:

enum Formatters {
enum Number {
    static let moneyFormatter: NumberFormatter = {
        let mFormatter = NumberFormatter()
        mFormatter.numberStyle = NumberFormatter.Style.currency
        mFormatter.currencyGroupingSeparator = " "
        mFormatter.roundingMode = NumberFormatter.RoundingMode.halfUp
        mFormatter.maximumFractionDigits = 0
        return mFormatter
    }()
}

}

并希望举例:如果11 400然后轮到11 000,如果11 500然后12 000 等等。但RoundMode只能正确使用数字,如何为群组设置?

1 个答案:

答案 0 :(得分:1)

NumberFormatter为此目的拥有roundingIncrement属性:

enum Formatters {
    enum Number {
        static let moneyFormatter: NumberFormatter = {
            let mFormatter = NumberFormatter()
            mFormatter.numberStyle = .currency
            mFormatter.roundingMode = .halfUp
            mFormatter.roundingIncrement = 1_000
            mFormatter.maximumFractionDigits = 0
            return mFormatter
        }()
    }
}

let fmt = Formatters.Number.moneyFormatter

print(fmt.string(from: 10_499.99)!) // 10.000 €
print(fmt.string(from: 10_500.00)!) // 11.000 €

然而,由于某些我不知道的原因,如果这个不起作用 已设置groupingSeparatorcurrencyGroupingSeparator属性。因此,如果您需要非默认分组分隔符,则可以 必须更换它"手动"在格式化的字符串中。

当然,另一种方法是将值四舍五入到最近 格式化之前的1000个的倍数。例如:

let value = 10_499.99
let roundedToThousands = (value / 1000).rounded() * 1000