Использование Python 2.7 как я могу округлить свои числа до двух знаков после запятой, а не до 10 или около того?
print "financial return of outcome 1 =","$"+str(out1)
Использование Python 2.7 как я могу округлить свои числа до двух знаков после запятой, а не до 10 или около того?
print "financial return of outcome 1 =","$"+str(out1)
Используйте встроенную функцию 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.
Поскольку вы говорите о финансовых цифрах, вы НЕ ХОТИТЕ использовать арифметику с плавающей запятой. Вам лучше использовать 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')
Помните, что если вы имитируете исходный результат, вам, возможно, придется совершать раунд в каждый процентный период, так как вы не можете платить/получать доли в процентах и не получать проценты по центрам. Для симуляций довольно просто использовать плавающую точку из-за присущих неопределенностей, но если это так, всегда помните, что ошибка есть. Из-за этого даже инвестиции с фиксированными процентами могут немного отличаться.
Вы можете использовать str.format()
:
>>> print "financial return of outcome 1 = {:.2f}".format(1.23456)
financial return of outcome 1 = 1.23
При работе с копейками/целыми числами. У вас возникнет проблема с 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.
print "financial return of outcome 1 = $%.2f" % (out1)
Лучше всего, я думаю, использовать функцию format():
>>> print("financial return of outcome 1 = $ " + format(str(out1), '.2f'))
// Should print: financial return of outcome 1 = $ 752.60
Но я должен сказать: не используйте раунд или формат при работе с финансовыми значениями.
Когда мы используем функцию round(), она не даст правильных значений.
вы можете проверить его, используя, раунд (2.735) и раунд (2.725)
используйте
import math
num = input('Enter a number')
print(math.ceil(num*100)/100)
Довольно простой способ - сначала преобразовать float в строку, выбрать подстроку первых четырех чисел, и, наконец, преобразовать подстроку обратно в float. Например:
>>> out1 = 1.2345
>>> out1 = float(str(out1)[0:4])
>>> out1
Не может быть суперэффективным, но простым и работает:)
Округление до следующего 0,05, я бы сделал так:
def roundup(x):
return round(int(math.ceil(x / 0.05)) * 0.05,2)