#python #python-3.x
#python #python-3.x
Вопрос:
Проблема довольно проста, у меня есть число: например x = 123.234
Теперь то, что я хочу сделать, это: 1. измените на 2 знака после запятой: 123.23
; 2. добавьте 2 нуля спереди: 00123.45
; 3. добавьте 2 x-s в конце: 00123.45xx
; 4. и если мой x изменится на x = 1234.2345
, то мой конечный результат будет 01234.2345x
Я знаю, как получить ответ с помощью некоторого кода, но я просто хочу спросить, есть ли способ, которым я могу объединить все форматы в 1 строку, например:
"{:.2f,0>A,x<B}".format(number)
где A, B — это некоторое значение, которое вы можете установить
тогда это выдаст мне строку, хотя и бессмысленную, 00123.45xx
Комментарии:
1. Вы хотите дополнить число двумя нулями до определенной длины или вы хотите всегда добавлять ровно два нуля …?
2. Что мешает вам написать
00
иxx
до и после заполнителя формата?3. с определенной длиной, которую можно установить самостоятельно … ровно с 2 нулями / x я могу просто ’00’ string ‘xx’ без проблем … возможно, мой вопрос слишком странный 🙂
4. Вы хотите добавить 0 впереди, а x в конце числа с плавающей запятой?
Ответ №1:
Если вы хотите дополнить число нулями определенной длины:
'{:0>8.2f}'.format(123.234) # 00123.23
Если вы всегда хотите добавить ровно 2 нуля:
'00{:.2f}'
И это также должно сделать очевидным, как применить два завершающих xxs:
'00{:.2f}xx'
Комментарии:
1. да, я знаю, что мы можем получить 00123.23, используя ‘{:0> 8.2f}’.format(123.234); и мы можем получить 123.23xx, используя ‘{: x<8.2f}’.format(123.234), но, похоже, мы не можем просто объединить эти два формата в один…
2. Вы хотите выровнять по центру с разным заполнением слева и справа …?
3. может быть, другой пример: вы можете изменить x = 5 на x = 5,00, используя «{: .2f}».format(x), вы также можете изменить x = 5 на x = 05, используя «{: 0> 2d}».format(x); но если я хочу изменить x = 5 на x = 05,00, кажется, мы не можем использовать «{: 2f, 0> 2d}».format (x), мы не можем указать несколько форматов в этом {}
4. Было бы действительно полезно, если бы вы могли формализовать свои ожидания в виде простого предложения на английском языке, например «выровнять по центру с помощью разных предварительных и последующих отступов»…
5. «Применение нескольких форматов» — это всего лишь средство для достижения цели . Это не описывает, что вы на самом деле пытаетесь сделать. Для любой конкретной конечной цели может быть очень краткий способ сделать это с помощью строки формата; но для других целей такой строки формата не существует, и вам нужно использовать какое-то другое решение. В общем, нет, «несколько форматов» — это не то, но, вероятно, есть тесно связанное решение. Также смотрите xyproblem.info .
Ответ №2:
С переменной точностью, предварительной шириной и последующей шириной:
>>> "{:0>{prewidth}.{prec}f}{:x<{postwidth}s}".format(123.456, '', prec=2, prewidth=8, postwidth=2)
'00123.45xx'
или их варианты.
Смотрите также страницу PyFormat.
Ответ №3:
>>> x = 123.456
>>> A = 5
>>> B = 2
>>> '{:0{}.{}f}'.format(x,A B 1,B) ('X'*(str(x)[::-1].find('.')-B))
'00123.46X'
>>> x = 1234.5678
>>> A = 7
>>> B = 2
>>> '{:0{}.{}f}'.format(x,A B 1,B) ('X'*(str(x)[::-1].find('.')-B))
'0001234.57XX'
Преимущество этого: полностью модульный.
A
— это общее количество чисел перед .
, B
— это количество десятичных знаков, которых не должно быть X
. Остальные десятичные знаки являются X
.
Комментарии:
1. Конечно. TBH Я здесь только для того, чтобы научиться решать проблемы других людей 🙂
Ответ №4:
В настоящее время я использую этот код:
x = 13.23456
k = "{:x<10s}".format("{:0>8.2f}".format(x))
print(k) #00013.23xx
и если вы измените длину x, общая длина результата останется прежней, хотя по-прежнему будут 0 и x:
x = 123.23456
k = "{:x<10s}".format("{:0>8.2f}".format(x))
print(k) #00123.23xx
кажется, у нас нет способа объединить {:x<10s} и {:0> 8.2f} в один:
#not possible: {:0>8.2f, x<10s}.format(x)