Foros del Web » Programando para Internet » PHP »

¿Como validar si un numero realmente es entero?

Estas en el tema de ¿Como validar si un numero realmente es entero? en el foro de PHP en Foros del Web. Saludos gente del foro, Tengo un pequeño gran problema con esto de los tipos de variables. Resulta que hay un campo en la base de ...
  #1 (permalink)  
Antiguo 20/02/2017, 18:33
Avatar de adryan310  
Fecha de Ingreso: septiembre-2012
Mensajes: 450
Antigüedad: 11 años, 7 meses
Puntos: 3
Pregunta ¿Como validar si un numero realmente es entero?

Saludos gente del foro,

Tengo un pequeño gran problema con esto de los tipos de variables. Resulta que hay un campo en la base de datos que se llama

tmp_cantidad y es de tipo DOUBLE(8,3)

Lo que quiere decir que me puede devolver numeros como por ejemplo:

- 0.250
- 1.000
- 0.500
- 3.000

El problema es que cuando tengo que imprimir este dato en pantalla, sí el número es un DECIMAL si tengo que mostrarlo como tal, pero si el número es un ENTERO tengo que presentar solo el número (Sin el punto). Por el momento tengo lo siguiente pero no me funka:
Código PHP:
                if(is_int($row['cantidad_tmp']))
           
$cantidad number_format($row['cantidad_tmp'],0); // Acá esto es para que me elimine los ceros despúes del punto.
        
else
           
$cantidad=number_format($row['cantidad_tmp'],3); 
Alguna ayuda al respecto ? Gracias
  #2 (permalink)  
Antiguo 20/02/2017, 19:00
Avatar de hhs
hhs
Colaborador
 
Fecha de Ingreso: junio-2013
Ubicación: México
Mensajes: 2.995
Antigüedad: 10 años, 9 meses
Puntos: 379
Respuesta: ¿Como validar si un numero realmente es entero?

Puedes forzar el tipo http://php.net/manual/es/language.ty...es.typecasting
__________________
Saludos
About me
Laraveles
A class should have only one reason to change.
  #3 (permalink)  
Antiguo 20/02/2017, 19:04
 
Fecha de Ingreso: septiembre-2015
Mensajes: 142
Antigüedad: 8 años, 7 meses
Puntos: 13
Respuesta: ¿Como validar si un numero realmente es entero?

y tus entero tienen ese formato ?
osea este : 300.00 , porque si es asi is_int claramente dirá que no son enteros.
yo usaría un REGEX ->

Código PHP:
Ver original
  1. if (preg_match('/^\d+$/', $variable)) {
  2.  
  3.  $cantidad = number_format($row['cantidad_tmp'],0);
  4. }
  5.   else
  6.            $cantidad=number_format($row['cantidad_tmp'],3);

edito : no había visto lo de manipulación de tipos , mi gustar gracias hhs.
  #4 (permalink)  
Antiguo 20/02/2017, 20:04
alvaro_trewhela
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: ¿Como validar si un numero realmente es entero?

Hice algo feísimo pero funciona:

Código PHP:
Ver original
  1. function doubleIsInt($d){
  2.     if(sizeof(explode(".", (string)$d)) == 1){ return true; }
  3. return false;
  4. }

  #5 (permalink)  
Antiguo 20/02/2017, 20:14
Avatar de adryan310  
Fecha de Ingreso: septiembre-2012
Mensajes: 450
Antigüedad: 11 años, 7 meses
Puntos: 3
Exclamación Respuesta: ¿Como validar si un numero realmente es entero?

Si mis amigos, los numeros a nivel de base de datos siempre tendran ese formato, por ejemplo:

Si yo almaceno en la base de datos medio kilo de carne de cerdo sería de esta manera 0.500 la cantidad.

pero si lo que almaceno es un kilo se guardara de la siguiente forma: 1.000

lo que necesito es que me presente el medio kilo de esta manera

0.500

y el kilo me lo presente de forma entera, osea:

1

probare los codigos que me otorgaron y les dire como me fue, gracias
  #6 (permalink)  
Antiguo 20/02/2017, 20:56
Avatar de adryan310  
Fecha de Ingreso: septiembre-2012
Mensajes: 450
Antigüedad: 11 años, 7 meses
Puntos: 3
Exclamación Respuesta: ¿Como validar si un numero realmente es entero?

Cita:
Iniciado por sonystar_17 Ver Mensaje
y tus entero tienen ese formato ?
osea este : 300.00 , porque si es asi is_int claramente dirá que no son enteros.
yo usaría un REGEX ->

Código PHP:
Ver original
  1. if (preg_match('/^\d+$/', $variable)) {
  2.  
  3.  $cantidad = number_format($row['cantidad_tmp'],0);
  4. }
  5.   else
  6.            $cantidad=number_format($row['cantidad_tmp'],3);

edito : no había visto lo de manipulación de tipos , mi gustar gracias hhs.
Probe este codigo y no me funciono amigo, pero gracias por el aporte
  #7 (permalink)  
Antiguo 20/02/2017, 21:01
Avatar de adryan310  
Fecha de Ingreso: septiembre-2012
Mensajes: 450
Antigüedad: 11 años, 7 meses
Puntos: 3
Exclamación Respuesta: ¿Como validar si un numero realmente es entero?

Cita:
Iniciado por alvaro_trewhela Ver Mensaje
Hice algo feísimo pero funciona:

Código PHP:
Ver original
  1. function doubleIsInt($d){
  2.     if(sizeof(explode(".", (string)$d)) == 1){ return true; }
  3. return false;
  4. }

Amigo tambien probe tu codigo y tampoco me corre pero igual gracias por tu aporte tambien
  #8 (permalink)  
Antiguo 20/02/2017, 21:15
 
Fecha de Ingreso: julio-2014
Mensajes: 334
Antigüedad: 9 años, 9 meses
Puntos: 30
Respuesta: ¿Como validar si un numero realmente es entero?

Fácil, utiliza
Código PHP:
 filter_var($numeroFILTER_VALIDATE_INT
si te devuelve true entonces representalo así

Código PHP:
(int) $numero 
  #9 (permalink)  
Antiguo 20/02/2017, 21:21
Avatar de adryan310  
Fecha de Ingreso: septiembre-2012
Mensajes: 450
Antigüedad: 11 años, 7 meses
Puntos: 3
Exclamación Respuesta: ¿Como validar si un numero realmente es entero?

Hice lo siguiente; es poco ortodoxo lo sé pero hasta el momento me ha funcionado. Acepto comentarios y recomendaciones al respecto, si creen que en algún momento podría fallar dicho código pues díganmelo, se los agradecería.

Código PHP:
/****************************************************/
        
        
$decimales explode(".",$row['cantidad_tmp']);
        
$suma_entre_si $decimales[0] + $decimales[1];
        
        if(
$row['cantidad_tmp'] == $suma_entre_si)
           
$cantidad number_format($row['cantidad_tmp'],0);
        else
           
$cantidad=number_format($row['cantidad_tmp'],3); 
/****************************************************/ 
Lo que se me ocurrió fue separar la parte entera de la parte decimal, luego sumar ambas partes y si la suma de ambas partes da lo mismo que el número sin separar quiere decir que es un numero entero y lógicamente que si no da lo mismo es porque después del punto había algo diferente a cero y por ende muestro los decimales del mismo.
  #10 (permalink)  
Antiguo 20/02/2017, 21:24
alvaro_trewhela
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: ¿Como validar si un numero realmente es entero?

A mi si me funciona, te dejo un ejemplito:



  #11 (permalink)  
Antiguo 20/02/2017, 23:03
 
Fecha de Ingreso: julio-2014
Mensajes: 334
Antigüedad: 9 años, 9 meses
Puntos: 30
Respuesta: ¿Como validar si un numero realmente es entero?

Cita:
Iniciado por adryan310 Ver Mensaje
Hice lo siguiente; es poco ortodoxo lo sé pero hasta el momento me ha funcionado. Acepto comentarios y recomendaciones al respecto, si creen que en algún momento podría fallar dicho código pues díganmelo, se los agradecería.

Código PHP:
/****************************************************/
        
        
$decimales explode(".",$row['cantidad_tmp']);
        
$suma_entre_si $decimales[0] + $decimales[1];
        
        if(
$row['cantidad_tmp'] == $suma_entre_si)
           
$cantidad number_format($row['cantidad_tmp'],0);
        else
           
$cantidad=number_format($row['cantidad_tmp'],3); 
/****************************************************/ 
Lo que se me ocurrió fue separar la parte entera de la parte decimal, luego sumar ambas partes y si la suma de ambas partes da lo mismo que el número sin separar quiere decir que es un numero entero y lógicamente que si no da lo mismo es porque después del punto había algo diferente a cero y por ende muestro los decimales del mismo.
Todo lo que sobrepase de 2 lineas de código lo resumes en uno, ya te puse la solución, solo aplicala.

Código PHP:
filter_var($numeroFILTER_VALIDATE_INT) ; 
Eso te devuelve True o False
  #12 (permalink)  
Antiguo 21/02/2017, 01:32
 
Fecha de Ingreso: septiembre-2015
Mensajes: 142
Antigüedad: 8 años, 7 meses
Puntos: 13
Respuesta: ¿Como validar si un numero realmente es entero?

error mio , no recordaba que manejabas una base de datos donde almacenabas eso.
asi que preg_match no funcionara como deberia , preg_match_all si lo haría para ver si son enteros.

aunque puedes hacer algo así (funciona):
Código PHP:
Ver original
  1. $data=array(1.000,2.3,100.000,0.4);
  2.  
  3. foreach ($data as $ttt)
  4. {
  5.    
  6.   if (is_numeric($ttt)){
  7.     if(intval($ttt) == $ttt){
  8.       $var = (int) $ttt;
  9.       echo "el entero es : $var <br>";
  10.   }
  11.       else{echo "el no entero es : $ttt<br>";}
  12.  
  13.    }
  14. }

output :
Cita:
el no entero es : 0.25
el entero es : 3
el entero es : 1
el no entero es : 0.5

Última edición por sonystar_17; 21/02/2017 a las 12:54
  #13 (permalink)  
Antiguo 21/02/2017, 18:00
Avatar de adryan310  
Fecha de Ingreso: septiembre-2012
Mensajes: 450
Antigüedad: 11 años, 7 meses
Puntos: 3
Respuesta: ¿Como validar si un numero realmente es entero?

Cita:
Iniciado por Triby2 Ver Mensaje
Fácil, utiliza
Código PHP:
 filter_var($numeroFILTER_VALIDATE_INT
si te devuelve true entonces representalo así

Código PHP:
(int) $numero 
Amigo hice lo siguiente y no me sirvio, cheka mi codigo:
Código PHP:
                if(filter_var($row['cantidad_tmp'], FILTER_VALIDATE_INT) == true)
           
$cantidad number_format($row['cantidad_tmp'],0);
        else
           
$cantidad=number_format($row['cantidad_tmp'],3); 
Dime en que podria estar fallando, gracias
  #14 (permalink)  
Antiguo 21/02/2017, 19:59
Avatar de adryan310  
Fecha de Ingreso: septiembre-2012
Mensajes: 450
Antigüedad: 11 años, 7 meses
Puntos: 3
De acuerdo Respuesta: ¿Como validar si un numero realmente es entero?

Bueno amigos, hasta el momento aplique lo recomendado por sonystar_17 nada más le hice algunas modificaciones pero la lógica es la misma, me funcionó muy bien, dejo acá el código:
Código PHP:
  $cant_tmp = array($row['cantidad_tmp']);
 
  foreach (
$cant_tmp as $ttt){
           if (
is_numeric($ttt)){
            if(
intval($ttt) == $ttt)
               
$cantidad = (int) $ttt;
            else
               
$cantidad=number_format($ttt,3);
           } 
  } 
Muchas gracias por la ayudas dadas
  #15 (permalink)  
Antiguo 22/02/2017, 15:40
 
Fecha de Ingreso: julio-2014
Mensajes: 334
Antigüedad: 9 años, 9 meses
Puntos: 30
Respuesta: ¿Como validar si un numero realmente es entero?

Cita:
Iniciado por adryan310 Ver Mensaje
Amigo hice lo siguiente y no me sirvio, cheka mi codigo:
Código PHP:
                if(filter_var($row['cantidad_tmp'], FILTER_VALIDATE_INT) == true)
           
$cantidad number_format($row['cantidad_tmp'],0);
        else
           
$cantidad=number_format($row['cantidad_tmp'],3); 
Dime en que podria estar fallando, gracias
No sé por qué utilizas number format si es entero utiliza (int)$numero y ya.

Si dices que no te funcionó, comparte el error y no digas que no te funcionó solo.
Compartenis el valor de $row['cantidad_tmp'] y el tip9 de valor que es, si nomte funciona debe deestar ahi el fallo.

Utiliza phptester.net, pon ahi tu codigo y me dices si sigue sin funcionar ahi, de lo,contrario el problema esta en sistema.
  #16 (permalink)  
Antiguo 01/03/2017, 22:29
Avatar de kip13  
Fecha de Ingreso: agosto-2011
Mensajes: 167
Antigüedad: 12 años, 8 meses
Puntos: 13
Respuesta: ¿Como validar si un numero realmente es entero?

Tambien puede servir esto:

Código PHP:
Ver original
  1. $data=array(1.000,2.3,100.000,0.4, 'cadena');
  2.  
  3. foreach ($data as $key => $num) {
  4.     if (is_numeric($num))
  5.         $data[$key] = (filter_var($num, FILTER_VALIDATE_INT) === FALSE) ? floatval($num) : intval($num) ;
  6. }
  7.  
  8. var_dump($data);

Código PHP:
Ver original
  1. array(5) {
  2.   [0]=>
  3.   int(1)
  4.   [1]=>
  5.   float(2.3)
  6.   [2]=>
  7.   int(100)
  8.   [3]=>
  9.   float(0.4)
  10.   [4]=>
  11.   string(6) "cadena"
  12. }

Etiquetas: numero, realmente, variable
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 23:39.