Используя Python 2.7, как мне округлить мои числа до двух десятичных знаков, а не до 10 или около того?
print "financial return of outcome 1 =","$"+str(out1)
Используя Python 2.7, как мне округлить мои числа до двух десятичных знаков, а не до 10 или около того?
print "financial return of outcome 1 =","$"+str(out1)
Decimal
s, в зависимости от того, что вы на самом деле пытаетесь сделать.Ответы:
Воспользуйтесь встроенной функцией
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'
помощь по
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("{:.2f}".format(val))
Decimal(format(val, '.2f'))
.Decimal('123.345').quantize(Decimal('1.00'), rounding=decimal.ROUND_HALF_UP)
дает вамDecimal('123.35')
. С другой стороны,Decimal(format(Decimal('123.345'), '.2f'))
дает,Decimal('123.34')
потому что двоичное представление 123,345 меньше 123,345.Поскольку вы говорите о финансовых показателях, вы НЕ ХОТИТЕ использовать арифметику с плавающей запятой. Вам лучше использовать 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 доллара) и другими числами.
У меня была функция, которая преобразовывала целое число в число с плавающей запятой.
... return float(115 * 0.01)
Это работало большую часть времени, но иногда возвращало что-то вроде
1.1500000000000001
.Поэтому я изменил свою функцию, чтобы она возвращалась вот так ...
... return float(format(115 * 0.01, '.2f'))
и это вернется
1.15
. Не'1.15'
или1.1500000000000001
(возвращает число с плавающей точкой, а не строку)Я в основном публикую это, чтобы вспомнить, что я сделал в этом сценарии, поскольку это первый результат в Google.
источник
Думаю, лучше всего использовать функцию format () :
>>> print("financial return of outcome 1 = $ " + format(str(out1), '.2f')) // Should print: financial return of outcome 1 = $ 752.60
Но я должен сказать: не используйте округление или формат при работе с финансовыми ценностями.
источник
format
требует нестрокового формата для f. Если нет, вы получили ValueError. Правильный код:format(out1, '.2f')
безКогда мы используем функцию round (), она не дает правильных значений.
вы можете проверить это с помощью круглого (2,735) и круглого (2,725)
пожалуйста, используйте
import math num = input('Enter a number') print(math.ceil(num*100)/100)
источник
print "financial return of outcome 1 = $%.2f" % (out1)
источник
Довольно простой обходной путь - сначала преобразовать число с плавающей запятой в строку, выбрать подстроку из первых четырех чисел и, наконец, преобразовать подстроку обратно в число с плавающей точкой. Например:
>>> 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)
источник