mirror of
https://github.com/MikeMcl/decimal.js.git
synced 2024-10-27 20:34:12 +00:00
Merge pull request #88 from luciavelasco/fix-toNearest-rounding
Fix toNearest rounding
This commit is contained in:
commit
c99bdef459
@ -2150,7 +2150,11 @@
|
|||||||
rm = Ctor.rounding;
|
rm = Ctor.rounding;
|
||||||
} else {
|
} else {
|
||||||
y = new Ctor(y);
|
y = new Ctor(y);
|
||||||
if (rm !== void 0) checkInt32(rm, 0, 8);
|
if (rm === void 0) {
|
||||||
|
rm = Ctor.rounding;
|
||||||
|
} else {
|
||||||
|
checkInt32(rm, 0, 8);
|
||||||
|
}
|
||||||
|
|
||||||
// If x is not finite, return x if y is not NaN, else NaN.
|
// If x is not finite, return x if y is not NaN, else NaN.
|
||||||
if (!x.d) return y.s ? x : y;
|
if (!x.d) return y.s ? x : y;
|
||||||
@ -2165,7 +2169,6 @@
|
|||||||
// If y is not zero, calculate the nearest multiple of y to x.
|
// If y is not zero, calculate the nearest multiple of y to x.
|
||||||
if (y.d[0]) {
|
if (y.d[0]) {
|
||||||
external = false;
|
external = false;
|
||||||
if (rm < 4) rm = [4, 5, 7, 8][rm];
|
|
||||||
x = divide(x, y, 0, rm, 1).times(y);
|
x = divide(x, y, 0, rm, 1).times(y);
|
||||||
external = true;
|
external = true;
|
||||||
finalise(x);
|
finalise(x);
|
||||||
|
@ -27,8 +27,7 @@ T('toNearest', function () {
|
|||||||
t(!isMinusZero(new Decimal(1).toNearest(-3)));
|
t(!isMinusZero(new Decimal(1).toNearest(-3)));
|
||||||
t( isMinusZero(new Decimal(-1).toNearest(-3)));
|
t( isMinusZero(new Decimal(-1).toNearest(-3)));
|
||||||
|
|
||||||
t = function (expected, n, v, sd, rm) {
|
t = function (expected, n, v, rm) {
|
||||||
if (sd) Decimal.precision = sd;
|
|
||||||
T.assertEqual(expected, new Decimal(n).toNearest(v, rm).valueOf());
|
T.assertEqual(expected, new Decimal(n).toNearest(v, rm).valueOf());
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -67,9 +66,9 @@ T('toNearest', function () {
|
|||||||
|
|
||||||
t('0', 1, -3);
|
t('0', 1, -3);
|
||||||
t('-0', -1, -3);
|
t('-0', -1, -3);
|
||||||
t('3', 1.5, -3, 20, 0);
|
t('3', 1.5, -3, 0);
|
||||||
t('-0', -1.5, -3, 20, 1);
|
t('-0', -1.5, -3, 1);
|
||||||
t('-3', -1.5, -3, 20, 2);
|
t('-3', -1.5, -3, 2);
|
||||||
|
|
||||||
t('123', 123.456);
|
t('123', 123.456);
|
||||||
t('123', 123.456, 1);
|
t('123', 123.456, 1);
|
||||||
@ -87,68 +86,145 @@ T('toNearest', function () {
|
|||||||
t('123.46', 123.456, '-0.02');
|
t('123.46', 123.456, '-0.02');
|
||||||
t('123.456', 123.456, '-0.002');
|
t('123.456', 123.456, '-0.002');
|
||||||
|
|
||||||
t('83105511540', '83105511539.5', 1, 11, 4);
|
t('83105511540', '83105511539.5', 1, 4);
|
||||||
t('83105511539', '83105511539.499999999999999999999999999999', 1, 11, 4);
|
t('83105511539', '83105511539.499999999999999999999999999999', 1, 4);
|
||||||
t('83105511539', '83105511539.5', '1', 11, 5);
|
t('83105511539', '83105511539.5', '1', 5);
|
||||||
t('83105511540', '83105511539.5000000000000000000001', 1, 11, 5);
|
t('83105511540', '83105511539.5000000000000000000001', 1, 5);
|
||||||
|
|
||||||
t('83105511540', '83105511539.5', new Decimal(1), 3, 4);
|
Decimal.precision = 3;
|
||||||
t('83105511539', '83105511539.499999999999999999999999999999', 1, 3, 4);
|
|
||||||
t('83105511539', '83105511539.5', new Decimal('1'), 3, 5);
|
|
||||||
t('83105511540', '83105511539.5000000000000000000001', 1, 3, 5);
|
|
||||||
|
|
||||||
t('83105511540', '83105511539.5', Decimal.ONE, 30, 4);
|
t('83105511540', '83105511539.5', new Decimal(1), 4);
|
||||||
t('83105511539', '83105511539.499999999999999999999999999999', 1, 30, 4);
|
t('83105511539', '83105511539.499999999999999999999999999999', 1, 4);
|
||||||
t('83105511539', '83105511539.5', 1, 30, 5);
|
t('83105511539', '83105511539.5', new Decimal('1'), 5);
|
||||||
t('83105511540', '83105511539.5000000000000000000001', 1, 30, 5);
|
t('83105511540', '83105511539.5000000000000000000001', 1, 5);
|
||||||
|
|
||||||
t('83105511540', '83105511539.5', -1, 11, 4);
|
Decimal.precision = 20;
|
||||||
t('83105511539', '83105511539.499999999999999999999999999999', -1, 11, 4);
|
|
||||||
t('83105511539', '83105511539.5', '-1', 11, 5);
|
|
||||||
t('83105511540', '83105511539.5000000000000000000001', -1, 11, 5);
|
|
||||||
|
|
||||||
t('83105511540', '83105511539.5', new Decimal(-1), 3, 4);
|
t('83105511540', '83105511539.5', -1, 4);
|
||||||
t('83105511539', '83105511539.499999999999999999999999999999', 1, 3, 4);
|
t('83105511539', '83105511539.499999999999999999999999999999', -1, 4);
|
||||||
t('83105511539', '83105511539.5', new Decimal('-1'), 3, 5);
|
t('83105511539', '83105511539.5', '-1', 5);
|
||||||
t('83105511540', '83105511539.5000000000000000000001', -1, 3, 5);
|
t('83105511540', '83105511539.5000000000000000000001', -1, 5);
|
||||||
|
|
||||||
t('83105511540', '83105511539.5', 1, 30, 0);
|
t('-83105511540', '-83105511539.5', new Decimal(-1), 4);
|
||||||
t('83105511539', '83105511539.5', 1, 30, 1);
|
t('-83105511539', '-83105511539.499999999999999999999999999999', 1, 4);
|
||||||
t('83105511540', '83105511539.5', 1, 30, 2);
|
t('-83105511539', '-83105511539.5', new Decimal('-1'), 5);
|
||||||
t('83105511539', '83105511539.5', 1, 30, 3);
|
t('-83105511540', '-83105511539.5000000000000000000001', -1, 5);
|
||||||
t('83105511540', '83105511539.5', 1, 30, 4);
|
|
||||||
t('83105511539', '83105511539.5', 1, 30, 5);
|
t('83105511540', '83105511539.5', 1, 0);
|
||||||
t('83105511540', '83105511539.5', 1, 30, 6);
|
t('83105511539', '83105511539.5', 1, 1);
|
||||||
t('83105511540', '83105511539.5', 1, 30, 7);
|
t('83105511540', '83105511539.5', 1, 2);
|
||||||
t('83105511539', '83105511539.5', 1, 30, 8);
|
t('83105511539', '83105511539.5', 1, 3);
|
||||||
t('83105511539', '83105511539.499999999999999999999999999999', void 0, 30, 0);
|
t('83105511540', '83105511539.5', 1, 4);
|
||||||
t('83105511539', '83105511539.499999999999999999999999999999', 1, 30, 1);
|
t('83105511539', '83105511539.5', 1, 5);
|
||||||
t('83105511539', '83105511539.499999999999999999999999999999', void 0, 30, 2);
|
t('83105511540', '83105511539.5', 1, 6);
|
||||||
t('83105511539', '83105511539.499999999999999999999999999999', 1, 30, 3);
|
t('83105511540', '83105511539.5', 1, 7);
|
||||||
t('83105511539', '83105511539.499999999999999999999999999999', void 0, 30, 4);
|
t('83105511539', '83105511539.5', 1, 8);
|
||||||
t('83105511539', '83105511539.499999999999999999999999999999', 1, 30, 5);
|
t('83105511539', '83105511539.499999999999999999999999999999', void 0, 0);
|
||||||
t('83105511539', '83105511539.499999999999999999999999999999', void 0, 30, 6);
|
t('83105511539', '83105511539.499999999999999999999999999999', 1, 1);
|
||||||
t('83105511539', '83105511539.499999999999999999999999999999', 1, 30, 7);
|
t('83105511539', '83105511539.499999999999999999999999999999', void 0, 2);
|
||||||
t('83105511539', '83105511539.499999999999999999999999999999', void 0, 30, 8);
|
t('83105511539', '83105511539.499999999999999999999999999999', 1, 3);
|
||||||
t('83105511540', '83105511539.5000000000000000000001', void 0, 30, 0);
|
t('83105511539', '83105511539.499999999999999999999999999999', void 0, 4);
|
||||||
t('83105511540', '83105511539.5000000000000000000001', 1, 30, 1);
|
t('83105511539', '83105511539.499999999999999999999999999999', 1, 5);
|
||||||
t('83105511540', '83105511539.5000000000000000000001', void 0, 30, 2);
|
t('83105511539', '83105511539.499999999999999999999999999999', void 0, 6);
|
||||||
t('83105511540', '83105511539.5000000000000000000001', 1, 30, 3);
|
t('83105511539', '83105511539.499999999999999999999999999999', 1, 7);
|
||||||
t('83105511540', '83105511539.5000000000000000000001', void 0, 30, 4);
|
t('83105511539', '83105511539.499999999999999999999999999999', void 0, 8);
|
||||||
t('83105511540', '83105511539.5000000000000000000001', 1, 30, 5);
|
t('83105511540', '83105511539.5000000000000000000001', void 0, 0);
|
||||||
t('83105511540', '83105511539.5000000000000000000001', void 0, 30, 6);
|
t('83105511539', '83105511539.5000000000000000000001', 1, 1);
|
||||||
t('83105511540', '83105511539.5000000000000000000001', 1, 30, 7);
|
t('83105511540', '83105511539.5000000000000000000001', void 0, 2);
|
||||||
t('83105511540', '83105511539.5000000000000000000001', void 0, 30, 8);
|
t('83105511539', '83105511539.5000000000000000000001', 1, 3);
|
||||||
|
t('83105511540', '83105511539.5000000000000000000001', void 0, 4);
|
||||||
|
t('83105511540', '83105511539.5000000000000000000001', 1, 5);
|
||||||
|
t('83105511540', '83105511539.5000000000000000000001', void 0, 6);
|
||||||
|
t('83105511540', '83105511539.5000000000000000000001', 1, 7);
|
||||||
|
t('83105511540', '83105511539.5000000000000000000001', void 0, 8);
|
||||||
|
|
||||||
Decimal.rounding = 0;
|
Decimal.rounding = 0;
|
||||||
t('83105511540', '83105511539.5', void 0, 11);
|
t('83105511540', '83105511539.5');
|
||||||
|
|
||||||
Decimal.rounding = 1;
|
Decimal.rounding = 1;
|
||||||
t('83105511539', '83105511539.5', void 0, 11);
|
t('83105511539', '83105511539.5');
|
||||||
|
|
||||||
t('3847560', '3847561.00000749', 10, 11, 0);
|
t('3847570', '3847561.00000749', 10, 0);
|
||||||
t('42840000000000000', '42835000000000001', '1e+13', 2, 0);
|
t('42840000000000000', '42835000000000001', '1e+13', 0);
|
||||||
t('42840000000000000', '42835000000000001', '1e+13', 2, 1);
|
t('42830000000000000', '42835000000000001', '1e+13', 1);
|
||||||
t('42840000000000000', '42835000000000000.0002', '1e+13', 200, 0);
|
t('42840000000000000', '42835000000000000.0002', '1e+13', 0);
|
||||||
t('42840000000000000', '42835000000000000.0002', '1e+13', 200, 1);
|
t('42830000000000000', '42835000000000000.0002', '1e+13', 1);
|
||||||
|
|
||||||
|
t('500', '449.999', 100, 0);
|
||||||
|
t('400', '449.999', 100, 1);
|
||||||
|
t('500', '449.999', 100, 2);
|
||||||
|
t('400', '449.999', 100, 3);
|
||||||
|
t('400', '449.999', 100, 4);
|
||||||
|
t('400', '449.999', 100, 5);
|
||||||
|
t('400', '449.999', 100, 6);
|
||||||
|
t('400', '449.999', 100, 7);
|
||||||
|
t('400', '449.999', 100, 8);
|
||||||
|
|
||||||
|
t('-500', '-449.999', 100, 0);
|
||||||
|
t('-400', '-449.999', 100, 1);
|
||||||
|
t('-400', '-449.999', 100, 2);
|
||||||
|
t('-500', '-449.999', 100, 3);
|
||||||
|
t('-400', '-449.999', 100, 4);
|
||||||
|
t('-400', '-449.999', 100, 5);
|
||||||
|
t('-400', '-449.999', 100, 6);
|
||||||
|
t('-400', '-449.999', 100, 7);
|
||||||
|
t('-400', '-449.999', 100, 8);
|
||||||
|
|
||||||
|
t('500', '450', 100, 0);
|
||||||
|
t('400', '450', 100, 1);
|
||||||
|
t('500', '450', 100, 2);
|
||||||
|
t('400', '450', 100, 3);
|
||||||
|
t('500', '450', 100, 4);
|
||||||
|
t('400', '450', 100, 5);
|
||||||
|
t('400', '450', 100, 6);
|
||||||
|
t('500', '450', 100, 7);
|
||||||
|
t('400', '450', 100, 8);
|
||||||
|
|
||||||
|
t('-500', '-450', 100, 0);
|
||||||
|
t('-400', '-450', 100, 1);
|
||||||
|
t('-400', '-450', 100, 2);
|
||||||
|
t('-500', '-450', 100, 3);
|
||||||
|
t('-500', '-450', 100, 4);
|
||||||
|
t('-400', '-450', 100, 5);
|
||||||
|
t('-400', '-450', 100, 6);
|
||||||
|
t('-400', '-450', 100, 7);
|
||||||
|
t('-500', '-450', 100, 8);
|
||||||
|
|
||||||
|
Decimal.rounding = 0;
|
||||||
|
t('500', '450.001', 100);
|
||||||
|
Decimal.rounding = 1;
|
||||||
|
t('400', '450.001', 100);
|
||||||
|
Decimal.rounding = 2;
|
||||||
|
t('500', '450.001', 100);
|
||||||
|
Decimal.rounding = 3;
|
||||||
|
t('400', '450.001', 100);
|
||||||
|
Decimal.rounding = 4;
|
||||||
|
t('500', '450.001', 100);
|
||||||
|
Decimal.rounding = 5;
|
||||||
|
t('500', '450.001', 100);
|
||||||
|
Decimal.rounding = 6;
|
||||||
|
t('500', '450.001', 100);
|
||||||
|
Decimal.rounding = 7;
|
||||||
|
t('500', '450.001', 100);
|
||||||
|
Decimal.rounding = 8;
|
||||||
|
t('500', '450.001', 100);
|
||||||
|
|
||||||
|
Decimal.rounding = 0;
|
||||||
|
t('-500', '-450.001', 100);
|
||||||
|
Decimal.rounding = 1;
|
||||||
|
t('-400', '-450.001', 100);
|
||||||
|
Decimal.rounding = 2;
|
||||||
|
t('-400', '-450.001', 100);
|
||||||
|
Decimal.rounding = 3;
|
||||||
|
t('-500', '-450.001', 100);
|
||||||
|
Decimal.rounding = 4;
|
||||||
|
t('-500', '-450.001', 100);
|
||||||
|
Decimal.rounding = 5;
|
||||||
|
t('-500', '-450.001', 100);
|
||||||
|
Decimal.rounding = 6;
|
||||||
|
t('-500', '-450.001', 100);
|
||||||
|
Decimal.rounding = 7;
|
||||||
|
t('-500', '-450.001', 100);
|
||||||
|
Decimal.rounding = 8;
|
||||||
|
t('-500', '-450.001', 100);
|
||||||
});
|
});
|
||||||
|
Loading…
Reference in New Issue
Block a user