Возможный дубликат:
python ограничивает поплавки до двух десятичных знаков
Я хочу установить 39.54484700000000
в 39.54
с помощью python,
как его получить,
спасибо
Если вы хотите изменить фактическое значение, используйте round
как предложил Eli. Однако для многих значений и определенных версий Python это не будет представлено в виде строки "39.54". Если вы хотите просто округлить его, чтобы получить строку для отображения пользователю, вы можете сделать
>>> print "%.2f" % (39.54484700000000)
39.54
или в более новых версиях Python
>>> print("{:.2f}".format(39.54484700000000))
39.54
или с цепями
>>> print(f'{39.54484700000000:.2f}')
39.54
Соответствующая документация: операции форматирования строк, встроенные функции: round
number
39.54
Вы можете использовать метод quantize, если вы используете десятичное значение:
In [24]: q = Decimal('0.00')
In [25]: d = Decimal("115.79341800000000")
In [26]: d.quantize(q)
Out[26]: Decimal("115.79")
Как насчет round
>>> import decimal
>>> d=decimal.Decimal("39.54484700000000")
>>> round(d,2)
39.54
Эли упоминает использование круглой функции - в зависимости от ваших требований, вы можете захотеть вместо этого вернуть десятичный объект.
>>> from decimal import Decimal
>>> float_val = 39.54484700000000
>>> decimal_val = Decimal("%.2f" % float_val)
>>> print decimal_val
39.54
Использование десятичных объектов позволяет указать точное количество знаков после запятой, которые вы хотите отслеживать, поэтому вы не сможете получить число с плавающей запятой, которое представлено как 39.539999999999999
. В частности, если вы выполняете финансовые расчеты, вам почти всегда будет рекомендовано держаться подальше от чисел с плавающей запятой.
Вы не можете отличать float непосредственно в Decimals, однако (float неточно, и Python не может догадаться, как вы хотите, чтобы они округлились), поэтому я почти всегда сначала конвертирую их в округленное представление строки (что "%.2f" % float_val
- %.2f
означает отображение только двух десятичных знаков, а затем создание десятичного числа из этого.
Decimal
print
это? print
должна привести объект Decimal к строке, и его строковое представление будет просто "39.54"
Используйте round
:
Возвращает значение с плавающей запятой x округленные до n цифр после десятичной точка. Если n опущено, оно по умолчанию нуль. Результатом является плавающая точка номер. Значения округлены до ближайшего кратное 10 на мощность минус n; если два кратных одинаково близки, округление от 0
>>> round(39.544847, 2)
39.539999999999999
>>>
Обратите внимание, что поскольку 39.54 не является точно отображаемым с плавающими точками на моем ПК (x86), результат - это epsilon off. Но это не имеет значения (и это совершенно другая проблема со многими вопросами и ответами на него). Если вы правильно преобразуете его в строку, вы увидите, что вы ожидаете:
>>> "%.2f" % round(39.544847, 2)
'39.54'
>>> round(39.54484700000000, 2)
39.54
Обратите внимание, однако, что результат фактически не равен 39.54, но 39.53999999999999914734871708787977695465087890625.