Преобразовать список чисел с плавающей точкой в ​​список чисел с 2 десятичными знаками

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

Задача: преобразовать список строк с плавающей точкой в ​​число с двумя десятичными знаками

Оригинальный список:

mylist = ['17.21', '33.40', '24.39', '3.48', '1.02', '0.61', '18.03', '1.84']

цель

mylist = [17.21, 33.40, 24.39, 3.48, 1.02, 0.61, 18.03, 1.84]

Мой скрипт пытается

mylisttwo = map(float, mylist)

Это дало мне это

[17.21, 33.4, 24.39, 3.48, 1.02, 0.60999999999999999, 18.03, 1.84]

Тогда я подумал, отформатировать его

floatlist = []
for item in mylisttwo:
    floatlist.append("{0:.2f}".format(item))

но это снова дало мне список поплавков! arghhhh

['17.21', '33.40', '24.39', '3.48', '1.02', '0.61', '18.03', '1.84']

Что я здесь не так делаю?

Спасибо

4 ответа

Решение

[round(float(i), 2) for i in mylist]

Это должно работать. Формат для вставки строк в другие строки, как в "Hello, {}! What is your favourite {}?".format("Jim", "colour"),

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

Вы задали вопрос "Что я здесь не так делаю?". Я думаю, что вы делаете неправильно, передаете в качестве аргумента:

floatlist.append()

этот:

"{0:.2f}".format(item)

Метод format класса str просто возвращает отформатированную строку, и вы ожидаете получить фиксированные две десятичные точки с плавающей точкой. Поплавок не дает такой опции. rlms прав, вы должны использовать десятичную.

Решение аналогично numpy:

import numpy as np

np.round( [float(i) for i in mylist], 2)

возвращает:

array([ 17.21, 33.4 , 24.39, 3.48, 1.02, 0.61, 18.03, 1.84])

Я написал следующий код, который берет ваш оригинальный список и сопоставляет его с вашей "Целью":

from decimal import Decimal

def str_to_float_with_precision(item):
    precision = 2
    return float(Decimal(item, precision))

items = ['17.21', '33.40', '24.39', '3.48', '1.02', '0.61', '18.03', '1.84']
floated_items = map(str_to_float_with_precision, items)
print floated_items

Результат:

[17.21, 33.4, 24.39, 3.48, 1.02, 0.61, 18.03, 1.84]
Другие вопросы по тегам