javascript string to number

String to integer number

var n = parseInt('100',10); // 100; you want to use radix of 10 so you get a decimal number even with a leading 0
parseInt('123.45') // 123
parseInt('77') // 77
parseInt('077',10) // 77
parseInt('77',8) // 63 (= 7 + 7*8) base=8
parseInt('077') // 63 (= 7 + 7*8) base=8
parseInt('77',16) // 119 (= 7 + 7*16) base=16
parseInt('0x77') // 119 (= 7 + 7*16) base=16
parseInt('099') // 0 (9 is not an octal digit)
parseInt('99',8) // NaN (not-a-number value)
parseInt('0.1e6') // 0

var n = Math.floor('100.01'); // 100; floor automatically converts string to number

var n = Math.round('100'); // 100; equivalent to Math.round('100',0)

String to float number

parseFloat('1.5kg') // 1.5
parseFloat('55.3') // 55.3
parseFloat('055.3') // 55.3
parseFloat('0x55.3') // 0
parseFloat('.3') // 0.3
parseFloat('0.1e5') // 10000

The ultimate string-to-number conversion table:

x parseInt(x) parseFloat(x) Number(x) +x ~~x
"123" 123 123 123 123 123
"-123" -123 -123 -123 -123 -123
"123.45" 123 123.45 123.45 123.45 123
"-123.45" -123 -123.45 -123.45 -123.45 -123
"12e5" 12 1200000 1200000 1200000 1200000
"012" 12 12 12 12 12
"0xBABE" 47806 0 47806 47806 47806
"0xFFFFFFFF" 4294967295 0 4294967295 4294967295 -1
"123456789012345678" 123456789012345680 123456789012345680 123456789012345680 123456789012345680 -1506741424
"" NaN NaN 0 0 0
"123foo" 123 123 NaN NaN 0
"123.45foo" 123 123.45 NaN NaN 0
" 123 " 123 123 123 123 123
"foo" NaN NaN NaN NaN 0
null NaN NaN 0 0 0
undefined NaN NaN NaN NaN 0
true NaN NaN 1 1 1
false NaN NaN 0 0 0
{} NaN NaN NaN NaN 0
{} NaN NaN 125 125 125

code for table:

format = function(rows) {
	var lens = [];
	
	rows.forEach(function(row) {
		row.forEach(function(col, n) {
			lens[n] = Math.max(lens[n] || 0, col.length);
		})
	});

	return rows.map(function(row) {
		return row.map(function(col, n) {
			return new Array(lens[n] - col.length + 1).join(" ") + col;
		}).join(" | ")
	}).join("\n");
}

xs = [
    "123", "-123", "123.45", "-123.45", "12e5", "012", "0xBABE", 
	"0xFFFFFFFF", "123456789012345678",
    "", "123foo", "123.45foo", "  123   ", "foo", 
	null, window.foo, true, false, 
	{}, 
	{valueOf:function() { return 125 }}
]

table = [[
	"x",
	"parseInt(x)",
	"parseFloat(x)",
	"Number(x)",
	"+x",
	"~~x"
]].concat(xs.map(function(x) {
    return [
	    String(JSON.stringify(x)),
	    String(parseInt(x)),
	    String(parseFloat(x)),
	    String(Number(x)),
	    String(+x),
	    String(~~x)
	]
}))

document.body.innerHTML = "[pre]" + format(table) + "[/pre]"

Leave a Comment