Целочисленный тип представления в f-строках не возвращает ожидаемый формат - PullRequest
3 голосов
/ 14 марта 2020

Я использую python 3.8 в Docker контейнере. Это мой docker файл.

# Python image
FROM python:3.8.2-buster

# Install locales
RUN apt-get update
RUN apt-get install -y locales
RUN sed -i -e 's/# it_IT.UTF-8 UTF-8/it_IT.UTF-8 UTF-8/' /etc/locale.gen && locale-gen

#etc...

Я хочу отформатировать числа в соответствии с итальянским форматом (то есть, . в качестве разделителя тысяч). К счастью, формат-спецификация-мини-язык говорит:

Опция ',' сигнализирует об использовании запятой для разделителя тысяч. Для разделителя с поддержкой локали используйте вместо этого целочисленный тип представления 'n'.

Я запускаю этот код внутри такого контейнера:

>>> import locale
>>> locale.setlocale(locale.LC_ALL, "it_IT.UTF-8")
>>> a = 10000000
>>> f'a is equal to {a:,}'
'a is equal to 10,000,000' # ok!
>>> f'a is equal to {a:n}'
'a is equal to 10000000'   # What!? I expected 'a is equal to 10.000.000' instead

, но последняя строка ведет себя неожиданно.

Где я не прав? Это проблема с определением локали или с использованием форматирования чисел n?

1 Ответ

0 голосов
/ 14 марта 2020

Попробуйте это:

import locale
locale.setlocale(locale.LC_ALL, '') 
a = 1000000    
print(f'{a:n}')  # => 1,000,000
...