Строка формата для плавания и увеличения с 1 десятичного знака до 2 десятичных знаков в python

avatar
daryllzj
8 августа 2021 в 16:26
97
4
-3

У меня есть список цен с 1 десятичным знаком и в строковом формате.

Я хотел бы преобразовать каждый элемент в число с плавающей запятой, преобразовать их в два десятичных разряда и добавить в новый список.

price = ["9.8", "8.8" ,"10.9", "11.8", "13.9", "18.9"]

newprice = []

Я попробовал этот код, но он не работает

for i in range(len(price)):
      price2= float(price[i])
      price= '{0:.3g}'.format(price2)
      newprice.append(price)

Большинство онлайн-инструкций учат меня уменьшать до двух знаков после запятой, а не увеличивать до двух знаков после запятой.

Источник
Kelly Bundy
8 августа 2021 в 16:39
0

[p + '0' for p in price]?

Ответы (4)

avatar
Mark Ransom
8 августа 2021 в 16:49
0

Поскольку ваши числа уже являются строками, нет необходимости преобразовывать их в float. Просто разделите по десятичной запятой, отформатируйте крайнюю правую часть и снова соедините.

price_parts = price[i].split('.')
price_parts[-1] = price_parts[-1][:2].ljust(2, '0')
newprice.append('.'.join(price_parts))

Возможно, вы захотите добавить некоторую проверку, чтобы убедиться, что вы не искажаете число без десятичной точки.

avatar
drauedo
8 августа 2021 в 16:38
0

Прежде всего вам нужно преобразовать строки в числа с плавающей запятой, вы можете сделать это с помощью метода float() Затем вы добавляете формат к номеру с помощью метода format()

Вы можете попробовать следующий код:

price = ["9.8", "8.8" ,"10.9", "11.8", "13.9", "18.9"]

price_f = []

for i in price:
    new_price_float=format(float(i),'.2f')
    price_f.append(new_price_float)

print(price_f)

avatar
sj95126
8 августа 2021 в 16:37
1

У вас тут несколько проблем:

  • вы заменяете price (список) на price (строку), поэтому ваш цикл выходит из строя после одной итерации
  • вы хотите, чтобы спецификатор формата f добавлял конечные нули

Вы также можете внести несколько улучшений, в том числе не использовать списковые индексы, использовать более современные и Pythonic f-строки и пропустить промежуточную переменную price2:

for i in range(len(price)):
    newprice.append(f"{float(price[i]):.2f}")

Или вы можете использовать простое выражение списка:

newprice = [f"{float(n):.2f}" for n in price]
user15801675
8 августа 2021 в 16:37
0

Второе упражнение лучше.

avatar
Jacob
8 августа 2021 в 16:36
0

[float(i) for i in string_prices] — это простое понимание списка, которое преобразует ваши строки в числа с плавающей запятой

Десятичные разряды числа с плавающей запятой предназначены исключительно для отображения значения, поэтому преобразование из 1 в 2 десятичных знака в языке не предусмотрено, поскольку добавление нулей в конце не является другим значением.

string_prices = ["9.8", "8.8" ,"10.9", "11.8", "13.9", "18.9"]

prices = [float(i) for i in string_prices]

for price in prices:
    print(f"{price:.2f}")
user15801675
8 августа 2021 в 16:38
1

Вместо того, чтобы создавать новый список со значениями с плавающей запятой, просто введите float(price):.2f