diff --git a/lib/internal/util/inspect.js b/lib/internal/util/inspect.js index c611eb97fc0755..68d5bc3d0ccd04 100644 --- a/lib/internal/util/inspect.js +++ b/lib/internal/util/inspect.js @@ -2206,11 +2206,14 @@ function formatNumber(fn, number, numericSeparator) { } return fn(addNumericSeparator(numberString), 'number'); } - if (NumberIsNaN(number)) { + if (NumberIsNaN(number) || StringPrototypeIncludes(numberString, 'e')) { return fn(numberString, 'number'); } const decimalIndex = StringPrototypeIndexOf(numberString, '.'); + if (decimalIndex === -1) { + return fn(addNumericSeparator(numberString), 'number'); + } const integerPart = StringPrototypeSlice(numberString, 0, decimalIndex); const fractionalPart = StringPrototypeSlice(numberString, decimalIndex + 1); diff --git a/test/parallel/test-util-inspect-scientific.js b/test/parallel/test-util-inspect-scientific.js new file mode 100644 index 00000000000000..4768d1fbcdd2b1 --- /dev/null +++ b/test/parallel/test-util-inspect-scientific.js @@ -0,0 +1,29 @@ +'use strict'; + +require('../common'); +const assert = require('assert'); +const util = require('util'); + +// Ensure scientific notation is not broken when numericSeparator is enabled +{ + const value = 1e-7; + const result = util.inspect(value, { numericSeparator: true }); + + assert.strictEqual(result, '1e-7'); +} + +// Another scientific notation case (positive exponent) +{ + const value = 1e+21; + const result = util.inspect(value, { numericSeparator: true }); + + assert.strictEqual(result, '1e+21'); +} + +// Control case: regular number should still apply numeric separators +{ + const value = 1000000; + const result = util.inspect(value, { numericSeparator: true }); + + assert.strictEqual(result, '1_000_000'); +}