diff --git a/lib/internal/util/inspect.js b/lib/internal/util/inspect.js index c611eb97fc0755..61374d49ec09a3 100644 --- a/lib/internal/util/inspect.js +++ b/lib/internal/util/inspect.js @@ -2198,10 +2198,16 @@ function formatNumber(fn, number, numericSeparator) { } const numberString = String(number); + + // Scientific notation cannot have numeric separators applied sensibly + if (StringPrototypeIncludes(numberString, 'e')) { + return fn(numberString, 'number'); + } + const integer = MathTrunc(number); if (integer === number) { - if (!NumberIsFinite(number) || StringPrototypeIncludes(numberString, 'e')) { + if (!NumberIsFinite(number)) { return fn(numberString, 'number'); } return fn(addNumericSeparator(numberString), 'number'); diff --git a/test/parallel/test-util-inspect.js b/test/parallel/test-util-inspect.js index e60320d0591233..4e83ffe6b49ea2 100644 --- a/test/parallel/test-util-inspect.js +++ b/test/parallel/test-util-inspect.js @@ -3846,6 +3846,43 @@ assert.strictEqual( } } +// Regression test for https://github.com/nodejs/node/issues/62981 +// numericSeparator should not corrupt scientific notation numbers +{ + // Test cases from the bug report + assert.strictEqual( + util.inspect(1e-7, { numericSeparator: true }), + '1e-7' + ); + assert.strictEqual( + util.inspect(1.23e-7, { numericSeparator: true }), + '1.23e-7' + ); + assert.strictEqual( + util.inspect(1.23e+7, { numericSeparator: true }), + '1.23e+7' + ); + assert.strictEqual( + util.inspect(-1.23e-7, { numericSeparator: true }), + '-1.23e-7' + ); + assert.strictEqual( + util.inspect(1e10, { numericSeparator: true }), + '1e10' + ); + assert.strictEqual( + util.inspect(1.2345678901234567e+20, { numericSeparator: true }), + '1.2345678901234567e+20' + ); + + // With default numericSeparator: true + const { numericSeparator } = util.inspect.defaultOptions; + util.inspect.defaultOptions.numericSeparator = true; + assert.strictEqual(util.inspect(1e-7), '1e-7'); + assert.strictEqual(util.inspect(1.5e-10), '1.5e-10'); + util.inspect.defaultOptions.numericSeparator = numericSeparator; +} + // Regression test for https://github.com/nodejs/node/issues/41244 { assert.strictEqual(util.inspect({