Есть в любом случае я мог бы облавы числа в кортеже до двух знаков после запятой, от этого:округление чисел в кортеже
('string 1', 1234.55555, 5.66666, 'string2')
к этому:
('string 1', 1234.56, 5.67, 'string2')
Большое спасибо заранее.
Есть в любом случае я мог бы облавы числа в кортеже до двух знаков после запятой, от этого:округление чисел в кортеже
('string 1', 1234.55555, 5.66666, 'string2')
к этому:
('string 1', 1234.56, 5.67, 'string2')
Большое спасибо заранее.
Если ваш кортеж имеет фиксированный размер 4 и положение поплавков всегда то же самое, вы можете сделать это:
>>> t = ('string 1', 1234.55555, 5.66666, 'string2')
>>> t2 = (t[0], round(t[1], 2), round(t[2], 2), t[3])
>>> t2
('string 1', 1234.56, 5.67, 'string2')
Общее решение будет:
>>> t2 = tuple(map(lambda x: isinstance(x, float) and round(x, 2) or x, t))
>>> t2
('string 1', 1234.56, 5.67, 'string2')
Это дубликат. Ссылка была предоставлена как комментарий. Было бы лучше просто указать на это и отметить этот вопрос как дубликат. – pyfunc
Ссылка была не там, когда я написал свой ответ, и вопросы могут быть разными. Может быть, у него есть проблемы, связанные с кортежем, а не с арифметикой с плавающей запятой вообще? – tux21b
@pyfunc Я бы не сказал, что это дубликат. Это связано, но я думаю, что «общее решение», отправленное @ tux21b, - это то, к чему OP может стремиться. По крайней мере, так я понимаю это, как объединить поплавки/удваивания в кортеже, который содержит другие значения других типов. – Davy8
Список понимание решения:
t = ('string 1', 1234.55555, 5.66666, 'string2')
solution = tuple([round(x,2) if isinstance(x, float) else x for x in t])
Чтобы избежать issues with floating-point rounding errors, вы можете использовать decimal.Decimal
объектов:
"""
>>> rounded_tuple(('string 1', 1234.55555, 5.66666, 'string2'))
('string 1', Decimal('1234.56'), Decimal('5.67'), 'string2')
"""
from decimal import Decimal
def round_if_float(value):
if isinstance(value, float):
return Decimal(str(value)).quantize(Decimal('1.00'))
else:
return value
def rounded_tuple(tup):
return tuple(round_if_float(value) for value in tup)
rounded_tuple
использует generator expression внутри вызова кортежа.
Связанная нить на SO: http://stackoverflow.com/questions/455612/python-limiting-floats-to-two-decimal-points – pyfunc