2016-01-25 00:11:32 +00:00
|
|
|
if (typeof T === 'undefined') require('../setup');
|
|
|
|
|
2016-02-06 17:51:29 +00:00
|
|
|
T('toNearest', function () {
|
2016-02-04 23:52:10 +00:00
|
|
|
|
|
|
|
function isMinusZero(n) {
|
|
|
|
return n.isZero() && n.isNegative();
|
|
|
|
}
|
|
|
|
|
|
|
|
Decimal.config({
|
|
|
|
precision: 20,
|
|
|
|
rounding: 4,
|
|
|
|
toExpNeg: -9e15,
|
|
|
|
toExpPos: 9e15,
|
|
|
|
minE: -9e15,
|
|
|
|
maxE: 9e15
|
|
|
|
});
|
|
|
|
|
|
|
|
var t = function (actual) {
|
|
|
|
T.assert(actual);
|
|
|
|
}
|
|
|
|
|
|
|
|
t(!isMinusZero(new Decimal(0).toNearest(0)));
|
|
|
|
t( isMinusZero(new Decimal(-1).toNearest(0)));
|
|
|
|
t( isMinusZero(new Decimal(-0).toNearest(0)));
|
|
|
|
t(!isMinusZero(new Decimal(1).toNearest(0)));
|
|
|
|
t(!isMinusZero(new Decimal(1).toNearest(-0)));
|
|
|
|
t(!isMinusZero(new Decimal(1).toNearest(-3)));
|
|
|
|
t( isMinusZero(new Decimal(-1).toNearest(-3)));
|
|
|
|
|
|
|
|
t = function (expected, n, v, sd, rm) {
|
|
|
|
if (sd) Decimal.precision = sd;
|
|
|
|
T.assertEqual(expected, new Decimal(n).toNearest(v, rm).valueOf());
|
|
|
|
}
|
|
|
|
|
|
|
|
t('Infinity', Infinity);
|
|
|
|
t('-Infinity', -Infinity);
|
|
|
|
t('NaN', NaN);
|
|
|
|
t('NaN', NaN, NaN);
|
|
|
|
t('NaN', NaN, Infinity);
|
|
|
|
t('NaN', NaN, -Infinity);
|
|
|
|
t('NaN', NaN, 0);
|
|
|
|
t('NaN', NaN, -0);
|
|
|
|
|
|
|
|
t('Infinity', '9.999e+9000000000000000', '1e+9000000000000001');
|
|
|
|
t('Infinity', '9.999e+9000000000000000', '-1e+9000000000000001');
|
|
|
|
t('-Infinity', '-9.999e+9000000000000000', '1e+9000000000000001');
|
|
|
|
t('-Infinity', '-9.999e+9000000000000000', '-1e+9000000000000001');
|
|
|
|
t('9.999e+9000000000000000', '9.999e+9000000000000000');
|
|
|
|
t('-9.999e+9000000000000000', '-9.999e+9000000000000000');
|
|
|
|
|
|
|
|
t('NaN', 123.456, NaN);
|
|
|
|
t('Infinity', 123.456, Infinity);
|
|
|
|
t('Infinity', 123.456, -Infinity);
|
|
|
|
t('0', 123.456, 0);
|
|
|
|
t('0', 123.456, '-0');
|
|
|
|
|
|
|
|
t('NaN', -123.456, NaN);
|
|
|
|
t('-Infinity', -123.456, Infinity);
|
|
|
|
t('-Infinity', -123.456, -Infinity);
|
|
|
|
t('-0', -123.456, '-0');
|
|
|
|
|
|
|
|
t('0', 0, 0);
|
|
|
|
t('Infinity', 0, Infinity);
|
|
|
|
t('Infinity', 0, -Infinity);
|
|
|
|
t('-Infinity', -0, Infinity);
|
|
|
|
t('-Infinity', -0, -Infinity);
|
|
|
|
|
|
|
|
t('0', 1, -3);
|
|
|
|
t('-0', -1, -3);
|
|
|
|
t('3', 1.5, -3, 20, 0);
|
|
|
|
t('-0', -1.5, -3, 20, 1);
|
|
|
|
t('-3', -1.5, -3, 20, 2);
|
|
|
|
|
|
|
|
t('123', 123.456);
|
|
|
|
t('123', 123.456, 1);
|
|
|
|
t('123.5', 123.456, 0.1);
|
|
|
|
t('123.46', 123.456, 0.01);
|
|
|
|
t('123.456', 123.456, 0.001);
|
|
|
|
|
|
|
|
t('123', 123.456, -1);
|
|
|
|
t('123.5', 123.456, -0.1);
|
|
|
|
t('123.46', 123.456, -0.01);
|
|
|
|
t('123.456', 123.456, -0.001);
|
|
|
|
|
|
|
|
t('124', 123.456, '-2');
|
|
|
|
t('123.4', 123.456, '-0.2');
|
|
|
|
t('123.46', 123.456, '-0.02');
|
|
|
|
t('123.456', 123.456, '-0.002');
|
|
|
|
|
|
|
|
t('83105511540', '83105511539.5', 1, 11, 4);
|
|
|
|
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('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('83105511539', '83105511539.499999999999999999999999999999', 1, 30, 4);
|
|
|
|
t('83105511539', '83105511539.5', 1, 30, 5);
|
|
|
|
t('83105511540', '83105511539.5000000000000000000001', 1, 30, 5);
|
|
|
|
|
|
|
|
t('83105511540', '83105511539.5', -1, 11, 4);
|
|
|
|
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('83105511539', '83105511539.499999999999999999999999999999', 1, 3, 4);
|
|
|
|
t('83105511539', '83105511539.5', new Decimal('-1'), 3, 5);
|
|
|
|
t('83105511540', '83105511539.5000000000000000000001', -1, 3, 5);
|
|
|
|
|
2018-03-02 21:55:54 +00:00
|
|
|
t('83105511540', '83105511539.4', 1, 30, 0);
|
|
|
|
t('83105511539', '83105511539.4', 1, 30, 1);
|
|
|
|
t('83105511540', '83105511539.4', 1, 30, 2);
|
|
|
|
t('83105511539', '83105511539.4', 1, 30, 3);
|
|
|
|
t('83105511539', '83105511539.4', 1, 30, 4);
|
|
|
|
t('83105511539', '83105511539.4', 1, 30, 5);
|
|
|
|
t('83105511539', '83105511539.4', 1, 30, 6);
|
|
|
|
t('83105511539', '83105511539.4', 1, 30, 7);
|
|
|
|
t('83105511539', '83105511539.4', 1, 30, 8);
|
|
|
|
|
2016-02-04 23:52:10 +00:00
|
|
|
t('83105511540', '83105511539.5', 1, 30, 0);
|
|
|
|
t('83105511539', '83105511539.5', 1, 30, 1);
|
|
|
|
t('83105511540', '83105511539.5', 1, 30, 2);
|
|
|
|
t('83105511539', '83105511539.5', 1, 30, 3);
|
|
|
|
t('83105511540', '83105511539.5', 1, 30, 4);
|
|
|
|
t('83105511539', '83105511539.5', 1, 30, 5);
|
|
|
|
t('83105511540', '83105511539.5', 1, 30, 6);
|
|
|
|
t('83105511540', '83105511539.5', 1, 30, 7);
|
|
|
|
t('83105511539', '83105511539.5', 1, 30, 8);
|
|
|
|
t('83105511539', '83105511539.499999999999999999999999999999', void 0, 30, 0);
|
|
|
|
t('83105511539', '83105511539.499999999999999999999999999999', 1, 30, 1);
|
|
|
|
t('83105511539', '83105511539.499999999999999999999999999999', void 0, 30, 2);
|
|
|
|
t('83105511539', '83105511539.499999999999999999999999999999', 1, 30, 3);
|
|
|
|
t('83105511539', '83105511539.499999999999999999999999999999', void 0, 30, 4);
|
|
|
|
t('83105511539', '83105511539.499999999999999999999999999999', 1, 30, 5);
|
|
|
|
t('83105511539', '83105511539.499999999999999999999999999999', void 0, 30, 6);
|
|
|
|
t('83105511539', '83105511539.499999999999999999999999999999', 1, 30, 7);
|
|
|
|
t('83105511539', '83105511539.499999999999999999999999999999', void 0, 30, 8);
|
|
|
|
t('83105511540', '83105511539.5000000000000000000001', void 0, 30, 0);
|
|
|
|
t('83105511540', '83105511539.5000000000000000000001', 1, 30, 1);
|
|
|
|
t('83105511540', '83105511539.5000000000000000000001', void 0, 30, 2);
|
|
|
|
t('83105511540', '83105511539.5000000000000000000001', 1, 30, 3);
|
|
|
|
t('83105511540', '83105511539.5000000000000000000001', void 0, 30, 4);
|
|
|
|
t('83105511540', '83105511539.5000000000000000000001', 1, 30, 5);
|
|
|
|
t('83105511540', '83105511539.5000000000000000000001', void 0, 30, 6);
|
|
|
|
t('83105511540', '83105511539.5000000000000000000001', 1, 30, 7);
|
|
|
|
t('83105511540', '83105511539.5000000000000000000001', void 0, 30, 8);
|
|
|
|
|
|
|
|
Decimal.rounding = 0;
|
|
|
|
t('83105511540', '83105511539.5', void 0, 11);
|
|
|
|
|
|
|
|
Decimal.rounding = 1;
|
|
|
|
t('83105511539', '83105511539.5', void 0, 11);
|
|
|
|
|
2018-03-02 22:11:22 +00:00
|
|
|
t('3847570', '3847561.00000749', 10, 11, 0);
|
2016-02-04 23:52:10 +00:00
|
|
|
t('42840000000000000', '42835000000000001', '1e+13', 2, 0);
|
|
|
|
t('42840000000000000', '42835000000000001', '1e+13', 2, 1);
|
|
|
|
t('42840000000000000', '42835000000000000.0002', '1e+13', 200, 0);
|
|
|
|
t('42840000000000000', '42835000000000000.0002', '1e+13', 200, 1);
|
2016-02-06 17:51:29 +00:00
|
|
|
});
|