[Pregunta]: Números flotantes y enteros.

Iniciado por Leguim, 10 Agosto 2020, 03:07 AM

0 Miembros y 1 Visitante están viendo este tema.

Leguim

Hola,

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

Código (php) [Seleccionar]

is_int($x) // devuelve true si un número es entero
is_float($x) // devuelve true si un número es flotante


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

Código (php) [Seleccionar]

$number = '34.7';

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...


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 (php) [Seleccionar]

// Había una función "round" que sirve para eso...
echo round(3.4);         // 3

EdePC

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 (php-brief) [Seleccionar]
<?php 
  $number 
'34.23';

  if ( 
is_numeric($number) ) {
    if ( 
is_float(+$number) ) {
      echo 
"$number es float";
    } elseif ( 
is_int(+$number) ) {
      echo 
"$number es entero";
    }
  } else {
    echo 
"$number no es un valor numérico válido";
  }
?>


Citar34.23 es float

Leguim

Cita de: 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 (php-brief) [Seleccionar]
<?php 
  $number 
'34.23';

  if ( 
is_numeric($number) ) {
    if ( 
is_float(+$number) ) {
      echo 
"$number es float";
    } elseif ( 
is_int(+$number) ) {
      echo 
"$number es entero";
    }
  } else {
    echo 
"$number no es un valor numérico válido";
  }
?>



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!


@XSStringManolo

Cita de: MiguelCanellas en 10 Agosto 2020, 04:16 AM
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.

MinusFour

Cita de: @XSStringManolo en 10 Agosto 2020, 19:30 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.

EdePC

Cita de: MiguelCanellas en 10 Agosto 2020, 04:16 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 :¬¬)