#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