Skip to content

Commit 7708c64

Browse files
committed
[FIX] confusion between precision and min_precision
`precision` expresses precision within the provided value and won't expand it if the max expression of the value is smaller `min_precision` will expand the value if the max expression of the value is smaller
1 parent 0527b8c commit 7708c64

File tree

2 files changed

+25
-3
lines changed

2 files changed

+25
-3
lines changed

src/js/ripple/amount.js

+3-2
Original file line numberDiff line numberDiff line change
@@ -1120,11 +1120,12 @@ Amount.prototype.to_human = function(opts) {
11201120
}
11211121
fraction_part = '';
11221122
} else {
1123-
fraction_part = Math.round(fraction_part / Math.pow(10, fraction_part.length - opts.precision)).toString();
1123+
var precision = Math.min(opts.precision, fraction_part.length);
1124+
fraction_part = Math.round(fraction_part / Math.pow(10, fraction_part.length - precision)).toString();
11241125

11251126
// because the division above will cut off the leading 0's we have to add them back again
11261127
// XXX look for a more elegant alternative
1127-
while (fraction_part.length < opts.precision) {
1128+
while (fraction_part.length < precision) {
11281129
fraction_part = '0' + fraction_part;
11291130
}
11301131
}

test/amount-test.js

+22-1
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,13 @@ describe('Amount', function() {
6969
assert.strictEqual(Amount.from_human("0.00012345 XAU").to_human({precision:6}), '0.000123');
7070
});
7171
it('to human, precision 16', function() {
72-
assert.strictEqual(Amount.from_human("0.00012345 XAU").to_human({precision:16}), '0.0001234500000000');
72+
assert.strictEqual(Amount.from_human("0.00012345 XAU").to_human({precision:16}), '0.00012345');
73+
});
74+
it('to human, precision 16, min_precision 16', function() {
75+
assert.strictEqual(Amount.from_human("0.00012345 XAU").to_human({precision:16, min_precision:16}), '0.0001234500000000');
76+
});
77+
it('to human, precision 16, min_precision 12', function() {
78+
assert.strictEqual(Amount.from_human("0.00012345 XAU").to_human({precision:16, min_precision:12}), '0.000123450000');
7379
});
7480
it('to human, precision 0, first decimal 4', function() {
7581
assert.strictEqual(Amount.from_human("0.4 XAU").to_human({precision:0}), '0');
@@ -80,6 +86,21 @@ describe('Amount', function() {
8086
it('to human, precision 0, first decimal 8', function() {
8187
assert.strictEqual(Amount.from_human("0.8 XAU").to_human({precision:0}), '1');
8288
});
89+
it('to human, precision 0, precision 16', function() {
90+
assert.strictEqual(Amount.from_human("0.0 XAU").to_human({precision:16}), '0.0');
91+
});
92+
it('to human, precision 0, precision 8, min_precision 16', function() {
93+
assert.strictEqual(Amount.from_human("0.0 XAU").to_human({precision:8, min_precision:16}), '0.0000000000000000');
94+
});
95+
it('to human, precision 0, first decimal 8', function() {
96+
assert.strictEqual(Amount.from_human("0.8 XAU").to_human({precision:0}), '1');
97+
});
98+
it('to human, precision 6, min_precision 6, max_sig_digits 20', function() {
99+
assert.strictEqual(Amount.from_human("0.0 XAU").to_human({precision: 6, min_precision: 6, max_sig_digits: 20}), '0.000000');
100+
});
101+
it('to human, precision 16, min_precision 6, max_sig_digits 20', function() {
102+
assert.strictEqual(Amount.from_human("0.0 XAU").to_human({precision: 16, min_precision: 6, max_sig_digits: 20}), '0.000000');
103+
});
83104
});
84105
describe('from_human', function() {
85106
it('1 XRP', function() {

0 commit comments

Comments
 (0)