Форматировать целое число с запятой, используя Python Printf - PullRequest
0 голосов
/ 30 марта 2020

Я использую сторонний пакет , называемый streamlit, и один из API может нарисовать ползунок в браузере в соответствии с этим:

streamlit.slider(label, min_value=None, max_value=None, value=None, step=None, format=None, key=None)

Созданный мной ползунок может принимать целочисленные значения (т. е. 1 000 000 или 10 000, и т. д. c), и эта функция имеет необязательный аргумент, который может отформатировать это целое число, используя printf:

format (str or None) – A printf-style format string controlling how the interface should display numbers. This does not impact the return value. 
Valid formatters: %d %e %f %g %i

Для целого числа, 1000000, Я мог бы установить форматирование стиля printf как format="%d", но я хочу, чтобы вывод выглядел как 1,000,000. Кажется, я не могу понять, есть ли способ выполнить это sh с учетом доступных ограничений форматирования.

Ответы [ 2 ]

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

Если у вас есть big_number = 100000.

В python 3.7, вы можете сделать что-то вроде этого:

print(f"{big_number:,d}")

В старых версиях:

print('{:,d}'.format(big_number))

И вывод будет:

100,000

Я предполагаю, что вы хотите, чтобы это поведение было на range значениях streamlit.slider(). Ну, согласно документации streamlit, как вы указали в своем вопросе:

format (str или None) - строка формата в стиле printf, управляющая тем, как интерфейс должен отображать цифры. Это не влияет на возвращаемое значение. Допустимые форматеры: %d %e %f %g %i

Так что, похоже, он не поддерживает всю спецификацию стиля printf, только те форматеры без flags .

Даже в python do c они должны установить некоторые флаги для достижения этой цели при использовании str.format():

Примечание

При форматировании числа (int, float, complex, decimal.Decimal и subclasses) с типом n (например: '{:n}'.format(1234)), функция временно устанавливает языковой стандарт LC_CTYPE на языковой стандарт LC_NUMERIC для декодирования decimal_point и thousands_sep полей localeconv(), если они не являются ASCII или длиннее 1 байта, а языковой стандарт LC_NUMERIC отличается от LC_CTYPE язык Это временное изменение влияет на другие темы.

Это согласуется с этим ответом

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

Вы можете использовать метод string.format (), доступный в python, для выполнения этой задачи.

...