diff --git a/src/js/ripple/amount.js b/src/js/ripple/amount.js index 11fa145f..e466bbd5 100644 --- a/src/js/ripple/amount.js +++ b/src/js/ripple/amount.js @@ -1111,10 +1111,12 @@ Amount.prototype.to_human = function(opts) { if (fraction_part.length || !opts.skip_empty_fraction) { // Enforce the maximum number of decimal digits (precision) if (typeof opts.precision === 'number') { - if (opts.precision === 0 && fraction_part.charCodeAt(0) >= 53) { + if (opts.precision <= 0 && fraction_part.charCodeAt(0) >= 53) { int_part = (Number(int_part) + 1).toString(); + fraction_part = []; + } else { + fraction_part = Math.round(fraction_part / Math.pow(10, fraction_part.length - opts.precision)).toString(); } - fraction_part = fraction_part.slice(0, opts.precision); } // Limit the number of significant digits (max_sig_digits) diff --git a/test/amount-test.js b/test/amount-test.js index e0b51894..273b9f37 100644 --- a/test/amount-test.js +++ b/test/amount-test.js @@ -16,6 +16,41 @@ describe('Amount', function() { assert(Amount.from_json('1').is_positive()); }); }); + describe('Positives', function() { + it('Number 1', function() { + assert(Amount.from_json('1').is_positive()); + }); + }); + // also tested extensively in other cases + describe('to_human', function() { + it('12345.6789 XAU', function() { + assert.strictEqual(Amount.from_human("12345.6789 XAU").to_human(), '12,345.6789'); + }); + it('12345.678901234 XAU', function() { + assert.strictEqual(Amount.from_human("12345.678901234 XAU").to_human(), '12,345.678901234'); + }); + it('to human, precision -1, should be ignored, precision needs to be >= 0', function() { + assert.strictEqual(Amount.from_human("12345.678901234 XAU").to_human({precision:-1}), '12,346'); + }); + it('to human, precision 0', function() { + assert.strictEqual(Amount.from_human("12345.678901234 XAU").to_human({precision:0}), '12,346'); + }); + it('to human, precision 1', function() { + assert.strictEqual(Amount.from_human("12345.678901234 XAU").to_human({precision:1}), '12,345.7'); + }); + it('to human, precision 2', function() { + assert.strictEqual(Amount.from_human("12345.678901234 XAU").to_human({precision:2}), '12,345.68'); + }); + it('to human, precision 3', function() { + assert.strictEqual(Amount.from_human("12345.678901234 XAU").to_human({precision:3}), '12,345.679'); + }); + it('to human, precision 4', function() { + assert.strictEqual(Amount.from_human("12345.678901234 XAU").to_human({precision:4}), '12,345.6789'); + }); + it('to human, precision 5', function() { + assert.strictEqual(Amount.from_human("12345.678901234 XAU").to_human({precision:5}), '12,345.67890'); + }); + }); describe('from_human', function() { it('1 XRP', function() { assert.strictEqual(Amount.from_human("1 XRP").to_text_full(), '1/XRP');