search for in the  
<is_floatis_integer>
Last updated: Thu, 19 May 2005

is_int

(PHP 3, PHP 4, PHP 5)

is_int -- Find whether a variable is an integer

Description

bool is_int ( mixed var )

Finds whether the given variable is an integer.

Note: To test if a variable is a number or a numeric string (such as form input, which is always a string), you must use is_numeric().

Parameters

var

The variable being evaluated.

Return Values

Returns TRUE if var is an integer, FALSE otherwise.



User Contributed Notes
is_int
18-May-2005 01:46
function precisionNumero($numero, $precision, $noDevuelveNulo) {
   if ( (isset($numero)) && (is_numeric($numero)) ) { //Es un número
       if ( ((int)$numero) == ((float)$numero) ) { //Entero
           $entero=(int)$numero;
       }
       else { //Real
           if ((substr($numero,0,1)) ==".") {//Real que comienza por .
               $entero="0";
               $patronPrecision=".%".$precision."s";
               sscanf ($numero,$patronPrecision, $decimal);
           }
           else { //real estandar
               $patronPrecision="%d.%".$precision."s";
               sscanf ($numero, $patronPrecision, $entero,$decimal);
           }
       }
      
       for ($i=strlen($decimal); $i<$precision ; $i++) {
           $decimal.="0";
       }
   }
   else { // No es un numero valido
       if ($noDevuelveNulo) {
           $entero="0";
           for ($i=0; $i<$precision ; $i++) {
               $decimal.="0";
           }
       }
       else return NULL;
   }
   return ($entero.".".$decimal);
}

precisionNumero("1.2.3", 2, true) returns 0.00
precisionNumero("1.23", 3, true) returns 1.230
precisionNumero(".23", 5, true) returns 0.23000
precisionNumero("1.", 7, true) returns 1.0000000
precisionNumero("1.2.3", 3, false) returns NULL
precisionNumero("0.0", 3, false) returns 0.000
berndt at www dot michael - berndt dot de
07-May-2005 01:57
checks if the divisibility is true with is_int ()
http://www.michael-berndt.de/ie/tux/teilbarkeitsregeln.htm
phpContrib (A T) esurfers d o t c o m
06-Nov-2003 02:42
// Just to be pedantic... ;)
// extreme-ints (!) like this will not work with previous function:

Test ("10.01e2" );
// 10.01e2 is 1001

// This one:

function myIsInt($x) {
   return ( is_numeric ($x ) ?  intval(0+$x ) ==  $x  :  false );
}

// will work even on these paranoid cases...

 

 

 

 

Note that:

   0+$x => converts object to float
   intval converts float to int
   == converts string to float
  
so this is exactly like

   return (is_numeric ($x ) ?  (float)((int)((float)$x))  === (float)$x  :  false) ;

 

or with one conversion to float less...

function real_is_intValued($var) {
   if(is_numeric($var)) {
       $var=(float)$var;
       return ((float)(int)$var)===$var;
   }
   return FALSE;
}
lclkk at urbanvagabond dot net
15-Sep-2003 09:24
I think the function below is a robust test for integers working on all datatypes. It works by first checking that a number can be evaluated numerically, and then secondly that the integer evaluation matches the original number.

Test cases are included.

<?
function myIsInt ($x) {
   return (
is_numeric($x) ? intval($x) == $x : false);
}

function
Test($x) {
   echo
"$x is " . ( myIsInt($x) ? ('an integer. The integer value is ' . intval($x)) : 'not an integer.');
   echo
"\n";
}

echo
"These should be integers...\n";
Test(1);
Test(5);
Test(10);
Test(10.0);
Test(20.0);
Test(-20.0);
Test(0+4+4.5+4.5);
Test("10.0");
Test("+14");
Test("-15");
Test("0");

echo
"\nThese should not be integers...\n";
Test(true); // watch out, this displays as '1'
Test(false);
Test("moose");
Test("3.5");
Test("-214235.5");
Test(""); // empty string
Test(array(1,2,3));
Test(dir('.')); // object
Test(null);
?>
gabe at websaviour dot com
14-Jul-2003 01:08
Although this can be inferred from the documentation, beware of numeric strings.  I ran into the problem in a MySQL app where I would either SELECT an INT PRIMARY KEY or INSERT a new record and use mysql_insert_id() to get the KEY before continuing onto the new section. 

I used is_int() to make sure the subsequent queries wouldn't break when using the key variable.  Unfortunately I failed to realize that while mysql_insert_id() returns an int, mysql_result() always returns a string even if you are SELECTing from an INT field.

Spent at least 30 minutes trying to figure out why existing records weren't getting linked, but new records would link fine.  I ended up using intval() on mysql_result() to make sure subsequent queries still always work.
phpguru at gmx dot ch
05-Jul-2003 10:50
To Logan:

There's also a simple non-regexp way to convert a (form) value into an integer if it consists of numbers only - although with a trap (see below):

if ($_POST["number"] == (int)$_POST["number"]) $_POST["number"] = (int)$_POST["number"];

The "traps" (or "side effects") appear with values like "" (empty string) and false (boolean), which are converted to 0 (integer). But in certain cases this might be desirable or/and usefull ;-)

Solutions like

if (($_POST["number"] + 1 - 1) == $_POST["number"]) ...

falls into the same category.
mark at g33kz dot co dot uk
18-Jun-2003 07:44
Or you could just use is_numeric()

I have a file called input.php which I run at the beginning of all my scripts which makes sure all my input numbers are converted to integers automatically.

if ($_GET) {
  foreach ($_GET as $k => $v) {
   $_GET[$k] = trim (stripslashes ($v));
   if (is_numeric ($v)) {
     $_GET[$k] = intval ($v);
   }
  }
}
if ($_POST) {
  foreach ($_POST as $k => $v) {
   $_POST[$k] = trim (stripslashes ($v));
   if (is_numeric ($v)) {
     $_POST[$k] = intval ($v);
   }
  }
}
if ($_COOKIE) {
  foreach ($_COOKIE as $k => $v) {
   $_COOKIE[$k] = trim (stripslashes ($v));
   if (is_numeric ($v)) {
     $_COOKIE[$k] = intval ($v);
   }
  }
}
logan at logannet dot net
10-Feb-2003 05:42
[[Editors note: Or you can simply use is_numeric()]]

Some people have offered their ways to find out if a string from a form is an integer or not, here's my way:

if(ereg("^[0-9]+$", $_POST["number"])) $_POST["number"] = (int)$_POST["number"];

In psuedo code:
if you are a string full of numbers then convert yourself to an integer

So instead of just checking if its a string full of numbers you check and then convert it, which means you can use the standard is_int. You can also do:

if(ereg("^[0-9]+$", $_POST["number"])) $_POST["number"] += 0;

I think the first way i mentioned is better because your coding what you want to do, rather than the second way that uses a side effect of adding 0 to convert the string.

The first way also may make your code ever so slightly faster (nothing noticeable) as php does not need to add 0 to the number after it converts it.

Also note an integer is full numbers (1, 2, 3 etc) not decimal numbers (1.1, 2.4, 3.7 etc), to convert decimal numbers you could use something like:

if(ereg("^[.0-9]+$", $_POST["number"])) $_POST["number"] = (float)$_POST["number"];

OR

if(ereg("^[.0-9]+$", $_POST["number"])) $_POST["number"] += 0;

But note that these would not work with is_int(), because they are not integers.

<is_floatis_integer>
 Last updated: Thu, 19 May 2005
Copyright © 2001-2005 The PHP Group
All rights reserved.
This unofficial mirror is operated at: The Server Pages
Last updated: Thu May 19 17:35:34 2005 CDT