制作我自己的格式化程序:
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只能正确使用数字,如何为群组设置?
答案 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 €
然而,由于某些我不知道的原因,如果这个不起作用
已设置groupingSeparator
或currencyGroupingSeparator
属性。因此,如果您需要非默认分组分隔符,则可以
必须更换它"手动"在格式化的字符串中。
当然,另一种方法是将值四舍五入到最近 格式化之前的1000个的倍数。例如:
let value = 10_499.99
let roundedToThousands = (value / 1000).rounded() * 1000