diff --git a/lodash.js b/lodash.js index 783feb9b9..879159985 100644 --- a/lodash.js +++ b/lodash.js @@ -5406,7 +5406,7 @@ return function(number, precision) { number = toNumber(number); precision = precision == null ? 0 : nativeMin(toInteger(precision), 292); - if (precision) { + if (precision && Number.isFinite(number)) { // Shift with exponential notation to avoid floating-point issues. // See [MDN](https://mdn.io/round#Examples) for more details. var pair = (toString(number) + 'e').split('e'), diff --git a/test/test.js b/test/test.js index 2a2b97c52..92ce499f7 100644 --- a/test/test.js +++ b/test/test.js @@ -19810,6 +19810,74 @@ assert.deepEqual(actual, expected); }); + + QUnit.test('`_.' + methodName + '` should return `Infinity` given `Infinity` regardless of `precision`', function(assert) { + assert.expect(6); + + var actual = func(Infinity); + assert.strictEqual(actual, Infinity); + + actual = func(Infinity, 0) + assert.strictEqual(actual, Infinity); + + actual = func(Infinity, 2) + assert.strictEqual(actual, Infinity); + + actual = func(Infinity, -2) + assert.strictEqual(actual, Infinity); + + actual = func(Infinity, 2); + assert.strictEqual(actual, isFloor ? Infinity : Infinity); + + actual = func(Infinity, 2); + assert.strictEqual(actual, isCeil ? Infinity : Infinity); + }); + + QUnit.test('`_.' + methodName + '` should return `-Infinity` given `-Infinity` regardless of `precision`', function(assert) { + assert.expect(6); + + var actual = func(-Infinity); + assert.strictEqual(actual, -Infinity); + + actual = func(-Infinity, 0) + assert.strictEqual(actual, -Infinity); + + actual = func(-Infinity, 2) + assert.strictEqual(actual, -Infinity); + + actual = func(-Infinity, -2) + assert.strictEqual(actual, -Infinity); + + actual = func(-Infinity, 2); + assert.strictEqual(actual, isFloor ? -Infinity : -Infinity); + + actual = func(-Infinity, 2); + assert.strictEqual(actual, isCeil ? -Infinity : -Infinity); + }); + + QUnit.test('`_.' + methodName + '` should return `NaN` given `NaN` regardless of `precision`', function(assert) { + assert.expect(6); + + var actual = func(NaN) + assert.deepEqual(actual, NaN); + + actual = func(NaN, 0) + assert.deepEqual(actual, NaN); + + actual = func(NaN, 2) + assert.deepEqual(actual, NaN); + + actual = func(NaN, -2) + assert.deepEqual(actual, NaN); + + actual = func(NaN, 2); + assert.deepEqual(actual, isFloor ? NaN : NaN); + + actual = func(NaN, 2); + assert.deepEqual(actual, isCeil ? NaN : NaN); + }); + + }); /*--------------------------------------------------------------------------*/