gpt4 book ai didi

swift - NumberFormatter RoundingMode 具有不寻常的舍入

转载 作者:行者123 更新时间:2023-11-28 15:31:43 26 4
gpt4 key购买 nike

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

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 仅适用于正确的数字,它如何为组设置?

最佳答案

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 属性已设置。因此,如果你需要一个非默认的分组分隔符,你会必须在格式化字符串中“手动”替换它。

当然,另一种方法是将值四舍五入到最接近的值1,000 的倍数 before 对其进行格式化。示例:

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

关于swift - NumberFormatter RoundingMode 具有不寻常的舍入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44660726/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com