Я пытаюсь определить строку формата, используя формат строки Python. мини-язык, чтобы получить строку с числом в фиксированной записи, но с локальным десятичным разделителем. См. следующий фрагмент для дальнейшего разъяснения желаемого результата:
import locale
import os
if os.name == 'nt':
locale.setlocale(locale.LC_ALL, 'de-de')
else:
locale.setlocale(locale.LC_ALL, 'de_de')
number = 1.234567
print('fixed notation: {:.7f}'.format(number))
print('general notation: {:.7g}'.format(number))
print('local format: {:.7n}'.format(number))
desired_output = '{:.7f}'.format(number)
print('desired output: {}'.format(desired_output.replace('.', ',')))
Замена .
на ,
является подходящим решением при использовании «обычных» строк. Однако в моем случае это кажется невыполнимым, поскольку мне нужно указать matplotlib.ticker.StrMethodFormatter
чтобы получить желаемый результат в виде галочек. Использование нотации локали работает так, как ожидалось:
ax.yaxis.set_major_formatter(ticker.StrMethodFormatter('{x:1.3n}'))
К сожалению, мне не удалось найти строку формата для комбинированного формата фиксированного (например, {:.3f}
) и обозначения локали ({:.3n}
), чтобы разрешить заполнение нулей в конце для одинаковой десятичной длины.
Как вы можете видеть на моей примерной диаграмме, они должны иметь как одинаковое количество десятичных разрядов (что может быть обеспечено записью с фиксированной точкой '{:.7f}'
), так и локальный десятичный разделитель (что может быть обеспечено '{:.7n}'
):
format
(если только вы не можете передавать экземпляры подклассаfloat
, который переопределяет__format__
, что вы, вероятно, не можете, если matplotlib создает числа под прикрытием…). - person abarnert   schedule 24.07.2018