Foro de elhacker.net

Programación => Desarrollo Web => Mensaje iniciado por: Leguim en 10 Agosto 2020, 03:07 am



Título: [Pregunta]: Números flotantes y enteros.
Publicado por: Leguim en 10 Agosto 2020, 03:07 am
Hola,

estuve viendo la documentación de PHP de las funciones, is_int($x) y is_float($x)...

Código
  1. is_int($x) // devuelve true si un número es entero
  2. is_float($x) // devuelve true si un número es flotante
  3.  

De entrada se podría decir que tengo un inconveniente con estas dos funciones que tiene PHP, vendría siendo que si...

Código
  1. $number = '34.7';
  2.  
  3. is_float($number) // devolverá false ya que está en una cadena, lo mismo me pasaría con is_int pero cuando uso "is_numeric" que sería simplemente para ver si un valor es un número no tiene problema si es un número en una cadena o un número "normal".. pero acá hace diferencia...
  4.  

Ese vendría siendo el primer problema que tengo,

el segundo ya vendría siendo una pregunta para poder "redondear" un número flotante...

EDIT:
Código
  1. // Había una función "round" que sirve para eso...
  2. echo round(3.4);         // 3
  3.  


Título: Re: [Pregunta]: Números flotantes y enteros.
Publicado por: EdePC en 10 Agosto 2020, 04:09 am
El round() funciona tal cual, no comprendo bien tu duda: http://www.php.net/round

Con respecto a is_numeric(), is_int() y is_float(), pues primero se comprueba si es número, luego se hace la conversión implícita anteponiendo el signo + para finalmente revisar si el resultado es del tipo Entero o Flotante:

Código
  1. <?php
  2.  $number = '34.23';
  3.  
  4.  if ( is_numeric($number) ) {
  5.    if ( is_float(+$number) ) {
  6.      echo "$number es float";
  7.    } elseif ( is_int(+$number) ) {
  8.      echo "$number es entero";
  9.    }
  10.  } else {
  11.    echo "$number no es un valor numérico válido";
  12.  }
  13. ?>

Citar
34.23 es float


Título: Re: [Pregunta]: Números flotantes y enteros.
Publicado por: Leguim en 10 Agosto 2020, 04:16 am
El round() funciona tal cual, no comprendo bien tu duda: http://www.php.net/round

Con respecto a is_numeric(), is_int() y is_float(), pues primero se comprueba si es número, luego se hace la conversión implícita anteponiendo el signo + para finalmente revisar si el resultado es del tipo Entero o Flotante:

Código
  1. <?php
  2.  $number = '34.23';
  3.  
  4.  if ( is_numeric($number) ) {
  5.    if ( is_float(+$number) ) {
  6.      echo "$number es float";
  7.    } elseif ( is_int(+$number) ) {
  8.      echo "$number es entero";
  9.    }
  10.  } else {
  11.    echo "$number no es un valor numérico válido";
  12.  }
  13. ?>


Hola!

Con el redondeo ya lo había resuelto por eso pegué ahí la solución y el "EDIT" para aclarar.

Con el otro problema, ¿por qué se pone el signo + antes? (por curiosidad)

Gracias!



Título: Re: [Pregunta]: Números flotantes y enteros.
Publicado por: @XSStringManolo en 10 Agosto 2020, 19:30 pm
Hola!

Con el redondeo ya lo había resuelto por eso pegué ahí la solución y el "EDIT" para aclarar.

Con el otro problema, ¿por qué se pone el signo + antes? (por curiosidad)

Gracias!


Es coherción de tipos implícita. Equivale a crear un objeto Número y pasarle el valor del string. Para que lo veas más claro:
is_float(+$number)
is_float($number * 1)
is_float($number - 0)

Como no puedes multiplicar ni restar un string, entonces se intenta utilizar algún tipo compatible con la operación.


Título: Re: [Pregunta]: Números flotantes y enteros.
Publicado por: MinusFour en 10 Agosto 2020, 20:55 pm
Es coherción de tipos implícita. Equivale a crear un objeto Número y pasarle el valor del string. Para que lo veas más claro:
is_float(+$number)
is_float($number * 1)
is_float($number - 0)

Como no puedes multiplicar ni restar un string, entonces se intenta utilizar algún tipo compatible con la operación.

"+operando" Es conversión explicita. Cuando el simbolo se usa de manera unaria es un operador diferente que esencialmente es una conversión explicita a un número apropiado (muy parecido a javascript). Multiplicación y resta (y no negación) si hacen conversión implícita a los operandos.


Título: Re: [Pregunta]: Números flotantes y enteros.
Publicado por: EdePC en 11 Agosto 2020, 01:34 am
Con el otro problema, ¿por qué se pone el signo + antes? (por curiosidad)

- Puedes verlo en la documentación de PHP que es muy entendible, organizada y ejemplificada: https://www.php.net/manual/es/language.types.type-juggling.php (a diferencia de la horrible documentación de Python :¬¬)