Hola,
estuve viendo la documentación de PHP de las funciones, is_int($x) y is_float($x)...
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...
$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:
// Había una función "round" que sirve para eso...
echo round(3.4); // 3
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:
<?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
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:
<?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!
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.
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.
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 :¬¬)