From 679efe2a6683a52539950697b240af082ac9ede0 Mon Sep 17 00:00:00 2001 From: ThomasV Date: Tue, 15 Dec 2015 11:33:04 +0100 Subject: [PATCH] don't use floats because of rounding errors --- lib/commands.py | 9 +++++---- lib/util.py | 2 +- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/lib/commands.py b/lib/commands.py index 47fe03b1..f07aa7c0 100644 --- a/lib/commands.py +++ b/lib/commands.py @@ -565,7 +565,7 @@ class Commands: return map(self._format_request, out) @command('w') - def addrequest(self, requested_amount, memo='', expiration=60*60, force=False): + def addrequest(self, amount, memo='', expiration=60*60, force=False): """Create a payment request.""" addr = self.wallet.get_unused_address(None) if addr is None: @@ -573,7 +573,7 @@ class Commands: addr = self.wallet.create_new_address(None, False) else: return False - amount = int(Decimal(requested_amount)*COIN) + amount = int(COIN*Decimal(amount)) expiration = int(expiration) req = self.wallet.make_payment_request(addr, amount, memo, expiration) self.wallet.add_payment_request(req, self.config) @@ -664,6 +664,7 @@ command_options = { } +# don't use floats because of rounding errors arg_types = { 'num':int, 'nbits':int, @@ -671,8 +672,8 @@ arg_types = { 'pubkeys': json.loads, 'inputs': json.loads, 'outputs': json.loads, - 'tx_fee': lambda x: float(x) if x is not None else None, - 'amount': lambda x: float(x) if x!='!' else '!', + 'tx_fee': lambda x: str(Decimal(x)) if x is not None else None, + 'amount': lambda x: str(Decimal(x)) if x!='!' else '!', } config_variables = { diff --git a/lib/util.py b/lib/util.py index 061941ea..560ade5d 100644 --- a/lib/util.py +++ b/lib/util.py @@ -147,7 +147,7 @@ def json_encode(obj): def json_decode(x): try: - return json.loads(x) + return json.loads(x, parse_float=decimal.Decimal) except: return x