Я пишу класс для представления денег, и одна проблема, с которой я столкнулся, заключается в том, что "1.50" != str(1.50)
. str (1.50) равно 1.5, и внезапно POOF. 45 центов исчезли, и сумма теперь составляет 1 доллар и 5 центов. не один доллар и 50 центов. В любом случае я мог бы помешать str сделать это, или я делаю что-то неправильно? Это Python 2 BTW.Сохранять конечные нули в python
ответ
При работе с деньгами всегда представляйте деньги, используя класс Decimal.
Ударьте меня на него :) – Patashu
Вы можете использовать format
метод на строках, чтобы указать, сколько знаков после запятой вы хотите, чтобы представить:
>>> "{:.2f}".format(1.5)
'1.50'
Но еще лучше было бы использовать decimal module
для представления денег, так как представления проблемы с бинарными поплавками могут дать вам несколько результатов, если вы делаете арифметику. В документации для этого модуля упоминает некоторые из этих вопросов, а именно - один из самых интересных для денежных приложений:
>>> 0.1+0.1+0.1-0.3
5.551115123125783e-17
>>> from decimal import Decimal
>>> Decimal('.1') + Decimal('.1') + Decimal('.1') - Decimal('.3')
Decimal('0.0')
Или просто ''% .2f "% 1.5' – grc
x = 1.500000
print '%.2f' % x
print '{:.3f}'.format(x)
результата
1.50
1.500
Это иллюстрирует важный момент: один доллар и пятьдесят цента ** не ** эквивалентна, скажем, 1,5 фунтам веса. 1,5 фунта и 1,50 фунта - это то же самое, и вы редко заботитесь о разнице между 1,5 фунтами и 1,50001 фунта. Это связано с тем, что «фунты» измеряют * непрерывное количество (вес), а «цента» измеряет * дискретное * количество. –
Плохой класс снова наносит удар ... – 2015-11-09 03:38:13