Округление до двух знаков после запятой в Python 2.7?

Использование Python 2.7 как я могу округлить свои числа до двух знаков после запятой, а не до 10 или около того?

print "financial return of outcome 1 =","$"+str(out1)

Ответ 1

Используйте встроенную функцию round():

>>> round(1.2345,2)
1.23
>>> round(1.5145,2)
1.51
>>> round(1.679,2)
1.68

Или встроенная функция format():

>>> format(1.2345, '.2f')
'1.23'
>>> format(1.679, '.2f')
'1.68'

Или форматирование строки нового стиля:

>>> "{:.2f}".format(1.2345)
'1.23
>>> "{:.2f}".format(1.679)
'1.68'

Или форматирование строки старого стиля:

>>> "%.2f" % (1.679)
'1.68'

help на round:

>>> print round.__doc__
round(number[, ndigits]) -> floating point number

Round a number to a given precision in decimal digits (default 0 digits).
This always returns a floating point number.  Precision may be negative.

Ответ 2

Поскольку вы говорите о финансовых цифрах, вы НЕ ХОТИТЕ использовать арифметику с плавающей запятой. Вам лучше использовать Decimal.

>>> from decimal import Decimal
>>> Decimal("33.505")
Decimal('33.505')

Форматирование вывода текста с использованием стиля format() (по умолчанию равно половине округления):

>>> print("financial return of outcome 1 = {:.2f}".format(Decimal("33.505")))
financial return of outcome 1 = 33.50
>>> print("financial return of outcome 1 = {:.2f}".format(Decimal("33.515")))
financial return of outcome 1 = 33.52

См. различия в округлении из-за неточности с плавающей запятой:

>>> round(33.505, 2)
33.51
>>> round(Decimal("33.505"), 2)  # This converts back to float (wrong)
33.51
>>> Decimal(33.505)  # Don't init Decimal from floating-point
Decimal('33.50500000000000255795384873636066913604736328125')

Правильный способ округления финансовых значений:

>>> Decimal("33.505").quantize(Decimal("0.01"))  # Half-even rounding by default
Decimal('33.50')

Также широко распространены другие типы округления в разных транзакциях:

>>> import decimal
>>> Decimal("33.505").quantize(Decimal("0.01"), decimal.ROUND_HALF_DOWN)
Decimal('33.50')
>>> Decimal("33.505").quantize(Decimal("0.01"), decimal.ROUND_HALF_UP)
Decimal('33.51')

Помните, что если вы имитируете исходный результат, вам, возможно, придется совершать раунд в каждый процентный период, так как вы не можете платить/получать доли в процентах и ​​не получать проценты по центрам. Для симуляций довольно просто использовать плавающую точку из-за присущих неопределенностей, но если это так, всегда помните, что ошибка есть. Из-за этого даже инвестиции с фиксированными процентами могут немного отличаться.

Ответ 3

Вы можете использовать str.format():

>>> print "financial return of outcome 1 = {:.2f}".format(1.23456)
financial return of outcome 1 = 1.23

Ответ 4

При работе с копейками/целыми числами. У вас возникнет проблема с 115 (как в $1,15) и другими номерами.

У меня была функция, которая преобразует Integer в Float.

...
return float(115 * 0.01)

Это работало большую часть времени, но иногда оно возвращало бы что-то вроде 1.1500000000000001.

Итак, я изменил свою функцию, чтобы вернуться так:

...
return float(format(115 * 0.01, '.2f'))

и это вернет 1.15. Не '1.15' или 1.1500000000000001 (возвращает float, а не строку)

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

Ответ 5

print "financial return of outcome 1 = $%.2f" % (out1)

Ответ 6

Лучше всего, я думаю, использовать функцию format():

>>> print("financial return of outcome 1 = $ " + format(str(out1), '.2f'))
// Should print: financial return of outcome 1 = $ 752.60

Но я должен сказать: не используйте раунд или формат при работе с финансовыми значениями.

Ответ 7

Когда мы используем функцию round(), она не даст правильных значений.

вы можете проверить его, используя, раунд (2.735) и раунд (2.725)

используйте

import math
num = input('Enter a number')
print(math.ceil(num*100)/100)

Ответ 8

Довольно простой способ - сначала преобразовать float в строку, выбрать подстроку первых четырех чисел, и, наконец, преобразовать подстроку обратно в float. Например:

>>> out1 = 1.2345
>>> out1 = float(str(out1)[0:4])
>>> out1

Не может быть суперэффективным, но простым и работает:)

Ответ 9

Округление до следующего 0,05, я бы сделал так:

def roundup(x):
    return round(int(math.ceil(x / 0.05)) * 0.05,2)