Módulo locale - Python
Por padrão, ao formatar números, o Python utiliza o sistema de notação numérica americano, onde os milhares são separados por vírgulas e a parte decimal é separada por um ponto. No entanto, em países da Europa continental e no Brasil, é utilizada uma convenção diferente: os milhares são separados por pontos, e a parte decimal é separada por vírgulas.
Exemplo:
# sistema americano
1,234.567
# sistema europeu e brasileiro
1.234,567
Para configurar a formatação de acordo com a convenção local, podemos utilizar o módulo integrado locale
Função setlocale()
A função setlocale()
locale
setlocale(category, locale)
: define a categoria de aplicação da função, como números, moedas, ou ambos. As constantes principais são:category
: aplica a localização a todas as categorias (números, moedas, datas, etc).LC_ALL
: aplica a localização apenas a números.LC_NUMERIC
: aplica a localização a valores monetários.LC_MONETARY
: aplica a localização a datas e horários.LC_TIME
: aplica a localização na conversão de caracteres para maiúsculas ou minúsculas.LC_CTYPE
: aplica a localização na comparação de strings.LC_COLLATE
: especifica o código de idioma e região. Por exemplo, para o Brasil, utilizamoslocale
no Windows e"pt_BR"
no Linux e macOS."pt_BR.UTF-8"
No Linux e macOs, é possível listar os códigos de idioma e região disponíveis no sistema executando o comando
no terminal.locale -a
No Windows, a lista de códigos de idioma e região está disponível na documentação oficial da Microsoft.
Funções para formatação de números e moedas
Para formatar números e valores monetários, o módulo locale
: formata um número de acordo com a configuração regional.format()
: formata um valor monetário.currency()
: insere um númeroformat_string(str, num)
no espaço reservado em uma stringnum
.str
Espaços Reservados:
: número inteiro.%d
: número de ponto flutuante.%f
: string.%s
Para números decimais, é possível definir a quantidade de casas após a vírgula:
"%.2f" # duas casas decimais
No exemplo abaixo, aplicamos a localização brasileira para números e valores monetários:
import locale
# Para Windows
locale.setlocale(locale.LC_ALL, "pt_BR")
# Para Linux e macOS
# locale.setlocale(locale.LC_ALL, "pt_BR.UTF-8")
number = 12345.6789
formatted = locale.format_string("%f", number)
print(formatted) # 12345,678900
formatted = locale.format_string("%.2f", number)
print(formatted) # 12345,68
formatted = locale.format_string("%d", number)
print(formatted) # 12345
formatted = locale.format_string("%e", number)
print(formatted) # 1,234568e+04
money = 234.678
formatted = locale.currency(money)
print(formatted) # R$ 234,68
Se o segundo parâmetro de setlocale()
getlocale()
import locale
locale.setlocale(locale.LC_ALL, "")
number = 12345.6789
formatted = locale.format_string("%.02f", number)
print(formatted) # 12345,68
print(locale.getlocale())
# Saída possível em Windows: ('pt_BR', 'cp1252')
# Saída possível em Linux e macOS: ('pt_BR', 'UTF-8')
Os resultados da formatação podem variar conforme o sistema operacional e a configuração regional da máquina.