Правильное форматирование валюты в Golang
При работе с форматированием валюты важно учитывать конкретные требования для каждой комбинации валюты и языка. Используя golang.org/x/text/currency, вы можете легко форматировать значения в соответствии с местными соглашениями. Однако при получении желаемого результата вы можете столкнуться с некоторыми проблемами.
Использование символов валюты
В вашем коде вы используетеcurrency.Symbol для получения символа валюты для указанный код ISO. Однако при использовании этого метода без указания языкового контекста вы можете не получить ожидаемых разделителей или форматирования чисел.
Включение локальных форматов
Вместо того, чтобы пытаться создать вручную вашего формата, вы можете использовать пакеты отображения и сообщений для автоматического получения соответствующего формата в зависимости от языка и региона. Вот пример:
import (
"fmt"
"golang.org/x/text/currency"
"golang.org/x/text/language"
"golang.org/x/text/message"
)
func formatCurrency(value int64, currencyCode string, languageCode string) string {
lang, _ := language.Parse(languageCode)
p := message.NewPrinter(lang)
unit, _ := currency.ParseISO(currencyCode)
return p.Sprintf("%v%v", currency.Symbol(unit), float64(value))
}
Эта функция принимает значение, код валюты и код языка и возвращает правильно отформатированную строку валюты.
Обработка единиц приращения
Некоторые валюты имеют фиксированную единицу приращения, например 5 или 10 центов. Чтобы учесть это, вы можете использовать пакет номеров для указания приращения:
import (
"golang.org/x/text/currency"
"golang.org/x/text/number"
)
func formatWithIncrement(value int64, currencyCode string, increment int) string {
unit, _ := currency.ParseISO(currencyCode)
scale, inc := currency.Cash.Rounding(unit)
dec := number.Decimal(float64(value), number.Scale(scale), number.IncrementString(fmt.Sprintf("%.2f", float64(inc))))
return fmt.Sprintf("%v%v", currency.Symbol(unit), dec)
}
Предоставляя языковой контекст, определяя формат валюты на основе языковых кодов и учитывая единицы приращения, вы можете создавать гибкие и точные решения для форматирования валюты в Golang, используя golang.org/x/text/currency.
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3