isInt() JavaScript function

22 May 2006   23 comments   Web development

Mind That Age!

This blog post is 11 years old! Most likely, its content is outdated. Especially if it's technical.

Powered by Fusion×

Here's my take on a function that determines if a variable is an integer or not before or after it's been recast to an int. The functionality is very similar to Python's 'isdigit()' function which works like this:

>>> assert "1".isdigit()
>>> assert not "1.0".isdigit()

However, my Javascript function should return true when the input is an integer or a string of an integer. Here it goes:

function isInt(x) {
   var y = parseInt(x, 10);
   return !isNaN(y) && x == y && x.toString() == y.toString();

You can see it in action here.
To be honest, I'm writing about this here just to not forget it the next time I need a similar function. Sorry to cause any interweb-noise.


Corrected whitespacing and made a jsFiddle link.


Thanx good idea i think. But are you sure the second part of the condition is useful?

Not sure:p
Peter Bengtsson
The second part is necessary so that "1.0" yields a false.
Indeed. My mistake:s
Am I allowed to use this function as long as I give you credit for it in my source code?
how about this:

String.prototype.isInt = function()
var re = new RegExp("^[\d]+$");
return this.match(re);
that will fail for negative numbers.
assert -> alert
Thanks the original function worked for me.
scott christopher
I tend to use:

function isInt (i) {
return (i % 1) == 0;
Peter Bengtsson
This fails on floating point numbers. isInt("1.1") is false but isInt("1.0") is true which it's not supposed to.
Stuart Thiel
Thanks, used and credited.
Thank you.
sorry i post the false code :/, delete it please.
isInt=function (i) { return ((i % 1) == 0)? i:false; }
Peter Bengtsson
Thanks. That's what scott suggested above. His approach returns only true or false.
function isInteger(s){
return (s%(parseInt(s)/Number(s)))===0;

is perfect solution (=
except when you want to consider "0" is an integer (which does)
Manuel SIMONOT feeling was right, there is useless parts. But he picked the really wrong one...

function isInt(n) {
return n.toString()==parseInt(n).toString();
// 'a' != 'NaN' so 'a' is not an Int
// '1.0' != '1' so '1.0' is not an Int

Peter want "1.0" to be false. So n%1==0 is the wrong test for that. But this request is, in a way, absurd. "1.0" is findable as being a Float. 1.0 can't. It is parsed from Float to Int before being send to the function. Displaying a 1.0 can only be done from a string. alert(1.0); give 1. And the test wrote in the article doesn't test Integer or Float, only String.
Aadit M Shah
The simplest form of isInt is as follows (for a number n):

parseInt(n) === n; //isInt

That's it - you don't need a function call! Similarly, we have the following:

parseInt(n) !== n; //isNotInt
parseFloat(n) === n; //isFloat
parseFloat(n) !== n; //isNotFloat
And how would you check this "03" ?
It depend of the version of EcmaScript and the browser.

"If the input string begins with "0", radix is eight (octal). This feature is non-standard, and some implementations deliberately do not support it (instead using the radix 10)."

"The ECMAScript 5 specification of the function parseInt no longer allows implementations to treat Strings beginning with a 0 character as octal values."

(Source : )

So... For this reason, you should always specify a radix when using parseInt().

parseInt("03", 10);
Why this:

var n = 3.0;

alerts "true"?
Peter Bengtsson
Python does the same:

>>> 3.0 == 3

But in python you can do:

>>> 3 is 3
>>> 3.0 is 3.0
>>> 3.0 is 3
Thank you for posting a comment

Your email will never ever be published

Related posts

SVN + ./todo + crontab 20 May 2006
IssueTrackerProduct 0.7.2 released 22 May 2006
Related by Keyword:
To assert or assertEqual in Python unit testing 14 February 2009
Interesting float/int casting in Python 25 April 2006
Integer division in programming languages 04 August 2004
Related by Text:
isArithmeticExpression() in Javascript 19 December 2007
Calculator in Python for dummies 17 December 2007
Integrate BrowserID in a Tornado web app 22 November 2011
How to do performance micro benchmarks in Python 24 June 2017
Credit Card formatter in Javascript 19 November 2013