From 9132f085070a99499a75d6353983bd1683f7a3f0 Mon Sep 17 00:00:00 2001 From: Zac Mitton Date: Mon, 20 Jun 2016 18:46:29 -0400 Subject: [PATCH] added a failing case and fixed it by refactoring everything to strings --- test/unit/util_test.js | 16 +++++++++++++++- ui/app/util.js | 18 ++++++++---------- 2 files changed, 23 insertions(+), 11 deletions(-) diff --git a/test/unit/util_test.js b/test/unit/util_test.js index 12a16999e..e2390c8d4 100644 --- a/test/unit/util_test.js +++ b/test/unit/util_test.js @@ -25,12 +25,26 @@ describe('util', function() { }) }) describe('parseBalance', function() { - it('should render 0.01 eth correctly', function() { + it('should render 12.023 eth correctly', function() { const input = 'A6DA46CCA6858000' const output = util.parseBalance(input) assert.deepEqual(output, ['12', '023']) }) }) + describe('parseBalance', function() { + it('should render 0.0000000342422 eth correctly', function() { + const input = '0x7F8FE81C0' + const output = util.parseBalance(input) + assert.deepEqual(output, ['0', '0000000342422']) + }) + }) + describe('parseBalance', function() { + it('should render 0 eth correctly', function() { + const input = '0x0' + const output = util.parseBalance(input) + assert.deepEqual(output, ['0', '0']) + }) + }) describe('addressSummary', function() { it('should add case-sensitive checksum', function() { diff --git a/ui/app/util.js b/ui/app/util.js index 6ece28a9e..56a16a4cd 100644 --- a/ui/app/util.js +++ b/ui/app/util.js @@ -85,22 +85,20 @@ function weiToEth(bn) { // Takes hex, returns [beforeDecimal, afterDecimal] function parseBalance(balance) { - if (!balance || balance === '0x0') return ['0', '0'] - var wei = numericBalance(balance).toString(10) - var eth = String(wei/valueTable['wei']) - var beforeDecimal = String(Math.floor(eth)) - var afterDecimal - if(eth.indexOf('.') > -1){ - afterDecimal = eth.slice(eth.indexOf('.') + 1) - }else{ - afterDecimal = '0' - } + let beforeDecimal, afterDecimal + let wei = numericBalance(balance).toString() + let trailingZeros = /0+$/ + + beforeDecimal = wei.length > 18 ? wei.slice(0, wei.length - 18) : '0' + afterDecimal = ("000000000000000000" + wei).slice(-18).replace(trailingZeros, "") + if(afterDecimal == ""){afterDecimal = "0" } return [beforeDecimal, afterDecimal] } // Takes wei hex, returns "None" or "${formattedAmount} ETH" function formatBalance(balance, decimalsToKeep) { var parsed = parseBalance(balance) + console.log(parsed) var beforeDecimal = parsed[0] var afterDecimal = parsed[1] var formatted = "None"