Как отформатировать отрицательный 0 с помощью currency NumberFormatter

#swift #nsnumberformatter

#swift #nsnumberformatter

Вопрос:

Я заметил, что мое приложение отображает «-$ 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)! // -$0.00
  

Ответ №1:

Если вы работаете с деньгами, currency и т.д., Гораздо лучше использовать Decimal чем Double , и это также решит вашу проблему здесь, измените объявление d , как показано ниже

 let d: Decimal = -1 * 0
  

и форматировщик выдаст «$ 0.00»

Ответ №2:

Мой текущий подход заключается:

 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) // $0.00