Недавно я проделал большую работу по форматированию валюты в проекте Swift, вот несколько трюков о том, как форматировать число в Swift:

Форматировать валюту с автоматическим символом валюты

Используя класс NumberFormatter, мы можем преобразовывать числа в строки и наоборот. Более удобно, мы также можем настроить объект NumberFormatter для автоматического отображения значений валюты в определенной локали с определенным символом валюты. Например, € в европейских странах, $ в Австралии и далее.

let value = 100.0
let currencyFormatter = NumberFormatter()
currencyFormatter.numberStyle = .currency
currencyFormatter.locale = Locale(identifier: "en_US")

let formattedValue = currencyFormatter.string(from: value as NSNumber)
print(formattedValue)  // "$100.00"

Формат валюты с максимальным 2 десятичными знаками

Кроме того, мы также можем отформатировать значения валюты в определенном формате, например, преобразовать 100,78 в 100,78 доллара США:

let formatter = NumberFormatter()
formatter.numberStyle = .currency
formatter.minimumFractionDigits = 0
formatter.maximumFractionDigits = 2

let amount1 = 100.78
let formattedAmount1 = formatter.string(from: NSNumber(value: amount1))!

print(formattedAmount1)  // Output: "$100.78"

// input is whole amount
let amount2 = 100
let formattedAmount2 = formatter.string(from: NSNumber(value: amount2))!

print(formattedAmount2)  // Output: "$100"

// input is whole amount
let amount3 = 100.1
let formattedAmount3 = formatter.string(from: NSNumber(value: amount3))!

print(formattedAmount3)  // Output: "$100.1"

minimumFractionDigits означает, что если исходное значение представляет собой целую сумму или только 1 десятичную часть, оно будет отображать только 0 или 1 десятичный знак, см. примеры выше для amount2 и amount3.

Форматировать валюту всегда с двумя десятичными знаками

Имейте в виду приведенный выше пример, мы также можем настроить средство форматирования, которое всегда отображает 2 десятичных знака (или любое количество десятичных знаков, которое вы хотите) для значений валюты:

let formatter = NumberFormatter()
formatter.numberStyle = .currency
formatter.minimumFractionDigits = 2
formatter.maximumFractionDigits = 2

let amount = 123456.789
let formattedAmount = formatter.string(from: NSNumber(value: amount))!

print(formattedAmount)  // Output: "$123,456.79"

Первоначально опубликовано на https://needone.app 13 февраля 2023 г.

👉 Если вы хотите получать больше подобных историй, подпишитесь на мой канал, чтобы своевременно получать последние обновления