From 6abfa759aa09d68074ac558d96c4b126a7cd1719 Mon Sep 17 00:00:00 2001 From: Chris Clark Date: Wed, 25 Mar 2015 11:19:25 -0700 Subject: [PATCH] [FIX] Make Amount.to_human return correct results for very small numbers --- src/js/ripple/amount.js | 2 +- test/amount-test.js | 6 ++++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/src/js/ripple/amount.js b/src/js/ripple/amount.js index 2a3f56e7..40eb0e16 100644 --- a/src/js/ripple/amount.js +++ b/src/js/ripple/amount.js @@ -842,7 +842,7 @@ Amount.prototype.to_human = function(opts) { } var isNegative = ref._value.isNegative(); - var valueString = ref._value.abs().toString(); + var valueString = ref._value.abs().toFixed(); var parts = valueString.split('.'); var int_part = parts[0]; var fraction_part = parts.length === 2 ? parts[1] : ''; diff --git a/test/amount-test.js b/test/amount-test.js index 9fd277df..ad5085b3 100644 --- a/test/amount-test.js +++ b/test/amount-test.js @@ -118,6 +118,12 @@ describe('Amount', function() { it('to human rounding edge case, precision 3, 2', function() { assert.strictEqual(Amount.from_human("0.999 XAU").to_human({precision:2}), '1.00'); }); + it('to human very small number', function() { + assert.strictEqual(Amount.from_json('12e-20/USD').to_human(), '0.00000000000000000012'); + }); + it('to human very small number with precision', function() { + assert.strictEqual(Amount.from_json('12e-20/USD').to_human({precision: 20}), '0.00000000000000000012'); + }); }); describe('from_human', function() { it('empty string', function() {