Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit 1ee38eb

Browse filesBrowse files
silverwindItalo A. Casas
authored andcommitted
util: add %i and %f formatting specifiers
This change brings formatting specifiers available in `util.format` and consequently, `console.*` closer to what is supported in all major browsers. - `%i` is introduced to format integer values. - `%f` is introduced to format floating point values. Fixes: #10292 PR-URL: #10308 Reviewed-By: James M Snell <jasnell@gmail.com>
1 parent 5ac719d commit 1ee38eb
Copy full SHA for 1ee38eb

File tree

Expand file treeCollapse file tree

3 files changed

+56
-10
lines changed
Open diff view settings
Filter options
Expand file treeCollapse file tree

3 files changed

+56
-10
lines changed
Open diff view settings
Collapse file

‎doc/api/util.md‎

Copy file name to clipboardExpand all lines: doc/api/util.md
+3-1Lines changed: 3 additions & 1 deletion
  • Display the source diff
  • Display the rich diff
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,9 @@ Each placeholder token is replaced with the converted value from the
103103
corresponding argument. Supported placeholders are:
104104

105105
* `%s` - String.
106-
* `%d` - Number (both integer and float).
106+
* `%d` - Number (integer or floating point value).
107+
* `%i` - Integer.
108+
* `%f` - Floating point value.
107109
* `%j` - JSON. Replaced with the string `'[Circular]'` if the argument
108110
contains circular references.
109111
* `%%` - single percent sign (`'%'`). This does not consume an argument.
Collapse file

‎lib/util.js‎

Copy file name to clipboardExpand all lines: lib/util.js
+16Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,22 @@ exports.format = function(f) {
8989
str += Number(arguments[a++]);
9090
lastPos = i = i + 2;
9191
continue;
92+
case 105: // 'i'
93+
if (a >= argLen)
94+
break;
95+
if (lastPos < i)
96+
str += f.slice(lastPos, i);
97+
str += parseInt(arguments[a++]);
98+
lastPos = i = i + 2;
99+
continue;
100+
case 102: // 'f'
101+
if (a >= argLen)
102+
break;
103+
if (lastPos < i)
104+
str += f.slice(lastPos, i);
105+
str += parseFloat(arguments[a++]);
106+
lastPos = i = i + 2;
107+
continue;
92108
case 106: // 'j'
93109
if (a >= argLen)
94110
break;
Collapse file

‎test/parallel/test-util-format.js‎

Copy file name to clipboardExpand all lines: test/parallel/test-util-format.js
+37-9Lines changed: 37 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -27,21 +27,51 @@ assert.throws(function() {
2727
util.format('%d', symbol);
2828
}, TypeError);
2929

30+
// Number format specifier
31+
assert.strictEqual(util.format('%d'), '%d');
3032
assert.strictEqual(util.format('%d', 42.0), '42');
3133
assert.strictEqual(util.format('%d', 42), '42');
32-
assert.strictEqual(util.format('%s', 42), '42');
33-
assert.strictEqual(util.format('%j', 42), '42');
34-
35-
assert.strictEqual(util.format('%d', '42.0'), '42');
3634
assert.strictEqual(util.format('%d', '42'), '42');
37-
assert.strictEqual(util.format('%s', '42'), '42');
38-
assert.strictEqual(util.format('%j', '42'), '"42"');
35+
assert.strictEqual(util.format('%d', '42.0'), '42');
36+
assert.strictEqual(util.format('%d', 1.5), '1.5');
37+
assert.strictEqual(util.format('%d', -0.5), '-0.5');
38+
assert.strictEqual(util.format('%d', ''), '0');
3939

40-
assert.strictEqual(util.format('%%s%s', 'foo'), '%sfoo');
40+
// Integer format specifier
41+
assert.strictEqual(util.format('%i'), '%i');
42+
assert.strictEqual(util.format('%i', 42.0), '42');
43+
assert.strictEqual(util.format('%i', 42), '42');
44+
assert.strictEqual(util.format('%i', '42'), '42');
45+
assert.strictEqual(util.format('%i', '42.0'), '42');
46+
assert.strictEqual(util.format('%i', 1.5), '1');
47+
assert.strictEqual(util.format('%i', -0.5), '0');
48+
assert.strictEqual(util.format('%i', ''), 'NaN');
49+
50+
// Float format specifier
51+
assert.strictEqual(util.format('%f'), '%f');
52+
assert.strictEqual(util.format('%f', 42.0), '42');
53+
assert.strictEqual(util.format('%f', 42), '42');
54+
assert.strictEqual(util.format('%f', '42'), '42');
55+
assert.strictEqual(util.format('%f', '42.0'), '42');
56+
assert.strictEqual(util.format('%f', 1.5), '1.5');
57+
assert.strictEqual(util.format('%f', -0.5), '-0.5');
58+
assert.strictEqual(util.format('%f', Math.PI), '3.141592653589793');
59+
assert.strictEqual(util.format('%f', ''), 'NaN');
4160

61+
// String format specifier
4262
assert.strictEqual(util.format('%s'), '%s');
4363
assert.strictEqual(util.format('%s', undefined), 'undefined');
4464
assert.strictEqual(util.format('%s', 'foo'), 'foo');
65+
assert.strictEqual(util.format('%s', 42), '42');
66+
assert.strictEqual(util.format('%s', '42'), '42');
67+
68+
// JSON format specifier
69+
assert.strictEqual(util.format('%j'), '%j');
70+
assert.strictEqual(util.format('%j', 42), '42');
71+
assert.strictEqual(util.format('%j', '42'), '"42"');
72+
73+
// Various format specifiers
74+
assert.strictEqual(util.format('%%s%s', 'foo'), '%sfoo');
4575
assert.strictEqual(util.format('%s:%s'), '%s:%s');
4676
assert.strictEqual(util.format('%s:%s', undefined), 'undefined:%s');
4777
assert.strictEqual(util.format('%s:%s', 'foo'), 'foo:%s');
@@ -50,11 +80,9 @@ assert.strictEqual(util.format('%s:%s', 'foo', 'bar', 'baz'), 'foo:bar baz');
5080
assert.strictEqual(util.format('%%%s%%', 'hi'), '%hi%');
5181
assert.strictEqual(util.format('%%%s%%%%', 'hi'), '%hi%%');
5282
assert.strictEqual(util.format('%sbc%%def', 'a'), 'abc%def');
53-
5483
assert.strictEqual(util.format('%d:%d', 12, 30), '12:30');
5584
assert.strictEqual(util.format('%d:%d', 12), '12:%d');
5685
assert.strictEqual(util.format('%d:%d'), '%d:%d');
57-
5886
assert.strictEqual(util.format('o: %j, a: %j', {}, []), 'o: {}, a: []');
5987
assert.strictEqual(util.format('o: %j, a: %j', {}), 'o: {}, a: %j');
6088
assert.strictEqual(util.format('o: %j, a: %j'), 'o: %j, a: %j');

0 commit comments

Comments
0 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.