Преобразовать список чисел с плавающей точкой в список чисел с 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]