use decimal.Decimal instead of float to store amounts of money

This commit is contained in:
Romain Bignon 2012-03-29 16:14:32 +02:00
commit b157e92d5b
28 changed files with 111 additions and 69 deletions

View file

@ -18,6 +18,7 @@
# along with weboob. If not, see <http://www.gnu.org/licenses/>.
from decimal import Decimal
import sys
from weboob.capabilities.bank import ICapBank, Account, Transaction
@ -123,8 +124,8 @@ class AccountListFormatter(IFormatter):
MANDATORY_FIELDS = ('id', 'label', 'balance', 'coming')
count = 0
tot_balance = 0.0
tot_coming = 0.0
tot_balance = Decimal(0)
tot_coming = Decimal(0)
def flush(self):
if self.count < 1:
@ -134,8 +135,8 @@ class AccountListFormatter(IFormatter):
result += u'%s Total %8s %8s' % ((' ' * 15) if not self.interactive else '',
'%.2f' % self.tot_balance, '%.2f' % self.tot_coming)
self.after_format(result)
self.tot_balance = 0.0
self.tot_coming = 0.0
self.tot_balance = Decimal(0)
self.tot_coming = Decimal(0)
self.count = 0
def format_dict(self, item):
@ -152,7 +153,7 @@ class AccountListFormatter(IFormatter):
result += '------------------------------------------%s+----------+----------\n' % (('-' * 15) if not self.interactive else '')
result += (u' %s%-' + (u'15' if self.interactive else '30') + u's%s %-25s %8s %8s') % \
(self.BOLD, id, self.NC,
item['label'], '%.2f' % item['balance'], '%.2f' % (item['coming'] or 0.0))
item['label'], '%.2f' % item['balance'], '%.2f' % (item['coming'] or Decimal(0.0)))
self.tot_balance += item['balance']
if item['coming']:
@ -281,7 +282,7 @@ class Boobank(ReplApplication):
id_to, backend_name_to = self.parse_id(id_to)
try:
amount = float(amount)
amount = Decimal(amount)
except (TypeError, ValueError):
print >>sys.stderr, 'Error: please give a decimal amount to transfer'
return 2

View file

@ -20,6 +20,8 @@
from PyQt4.QtGui import QListWidgetItem, QImage, QPixmap, QLabel, QIcon, QBrush, QColor
from PyQt4.QtCore import SIGNAL, Qt
from decimal import Decimal
from weboob.tools.application.qt import QtMainWindow, QtDo, HTMLDelegate
from weboob.tools.application.qt.backendcfg import BackendCfg
from weboob.capabilities.housing import ICapHousing, Query, City
@ -35,8 +37,8 @@ class HousingListWidgetItem(QListWidgetItem):
self.read = True
def __lt__(self, other):
return '%s%s' % (self.read, float(self.housing.cost or 0) / float(self.housing.area or 1)) < \
'%s%s' % (other.read, float(other.housing.cost or 0) / float(other.housing.area or 1))
return '%s%s' % (self.read, Decimal(self.housing.cost or 0) / Decimal(self.housing.area or 1)) < \
'%s%s' % (other.read, Decimal(other.housing.cost or 0) / Decimal(other.housing.area or 1))
def setAttrs(self, storage):
text = u'<h2>%s</h2>' % self.housing.title