如何用货币 NumberFormatter 格式化负数 0

How to format negative 0 with currency NumberFormatter

我注意到我的应用显示“-$0.00”表示值为 -0。数学的简单形式是 let balance: Double = -1 * value。我希望我的负 0 值只显示为“$0.00”。有没有办法让 NumberFormatter 正确处理这个问题?

let formatter = NumberFormatter()
formatter.numberStyle = .currency

let d: Double = -1 * 0
formatter.string(from: d as NSNumber)! // -[=10=].00

我目前的做法是:

struct Formatter {

    static func currency(_ value: Double) -> String {
        let formatter = NumberFormatter()
        formatter.numberStyle = .currency
        let value = (value == 0) ? 0 : value // Convert -0 to 0
        return formatter.string(from: value as NSNumber) ?? ""
    }

}


Formatter.currency(-1 * 0) // [=10=].00

如果你正在处理金钱、货币等,使用 DecimalDouble 好得多,它也可以解决你的问题,将 d 的声明更改为以下

let d: Decimal = -1 * 0

格式化程序将生成“$0.00”