tdon't use floats because of rounding errors - electrum - Electrum Bitcoin wallet HTML git clone https://git.parazyd.org/electrum DIR Log DIR Files DIR Refs DIR Submodules --- DIR commit 679efe2a6683a52539950697b240af082ac9ede0 DIR parent 23868d5769343ac3f5192831ca79923db1452cf6 HTML Author: ThomasV <thomasv@electrum.org> Date: Tue, 15 Dec 2015 11:33:04 +0100 don't use floats because of rounding errors Diffstat: M lib/commands.py | 9 +++++---- M lib/util.py | 2 +- 2 files changed, 6 insertions(+), 5 deletions(-) --- DIR diff --git a/lib/commands.py b/lib/commands.py t@@ -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: t@@ -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) t@@ -664,6 +664,7 @@ command_options = { } +# don't use floats because of rounding errors arg_types = { 'num':int, 'nbits':int, t@@ -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 = { DIR diff --git a/lib/util.py b/lib/util.py t@@ -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