Foros del Web » Programando para Internet » PHP »

Comprobar decimales

Estas en el tema de Comprobar decimales en el foro de PHP en Foros del Web. Hola: Me surgio una duda y no se como solventarlo; de esta manera compruebo que un numero no contiene decimales: $resultado == floor($resultado) Pero ahora ...
  #1 (permalink)  
Antiguo 15/01/2014, 06:35
 
Fecha de Ingreso: abril-2008
Mensajes: 348
Antigüedad: 16 años
Puntos: 1
Comprobar decimales

Hola:

Me surgio una duda y no se como solventarlo;

de esta manera compruebo que un numero no contiene decimales:
$resultado == floor($resultado)

Pero ahora lo que quiero es ponerle una condicion:

que contenga dos decimales y el segundo no sea cero.

hay manera de hacerlo?

un saludo
  #2 (permalink)  
Antiguo 15/01/2014, 06:39
 
Fecha de Ingreso: enero-2014
Mensajes: 6
Antigüedad: 10 años, 3 meses
Puntos: 0
Respuesta: Comprobar decimales

yo usaria, http://php.net/manual/es/function.preg-match.php

para este tipo de cosas, expresiones regulares jeje

saludos
  #3 (permalink)  
Antiguo 15/01/2014, 06:48
 
Fecha de Ingreso: abril-2008
Mensajes: 348
Antigüedad: 16 años
Puntos: 1
Respuesta: Comprobar decimales

hola:

disculpame, lo he leido, pero no veos como llevarlo a la practica.

Mil gracias
  #4 (permalink)  
Antiguo 15/01/2014, 07:53
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 5 meses
Puntos: 977
Respuesta: Comprobar decimales

Hay otras formas de buscar un elemento en una cadena sin necesidad de recurrir al uso de expresiones regulares. Por cierto, hay otras formas de comprobar que el número contenga decimales.

Código PHP:
Ver original
  1. //El número a evaluar
  2. $numero = 43.50;
  3.  
  4. //Compruebo si el número es igual al entero del mismo
  5. echo $numero == (int) $numero ? "No contiene decimales" : "Contiene decimales";
  6.  
  7. //Tomo el segundo decimal luego del punto decimal
  8. $decimales = substr($numero, strpos($numero, ".") + 2);
  9.  
  10. /*
  11.   Si no se encuentra una longitud de caracteres para la posición del segundo decimal
  12.   Entonces el segundo decimal es un cero, caso contrario, es un número distinto a cero
  13.   Cabe recordar que 5.20 y 5.2, valen lo mismo, por eso se toma como si existiera
  14.   un cero aún cuando no se haya colocado uno a la derecha del cero
  15.   El siguiente mensaje se mostrará si y sólo si el número contiene decimales
  16. */
  17. if ($numero != (int) $numero)
  18.     echo strlen($decimales) === 0 ? "El segundo decimal es cero" : "El segundo decimal no es cero";

Los resultados que obtendría, son los siguientes:

Código HTML:
Ver original
  1. Contiene decimales
  2. El segundo decimal es cero

Si en lugar de 43.50, tuviera el 82.54, los resultados serían los siguientes:

Código HTML:
Ver original
  1. Contiene decimales
  2. El segundo decimal no es cero

Si en lugar de 82.54, tuviera el 41.00, los resultados serían los siguientes:

Código HTML:
Ver original
  1. No contiene decimales

No se mostró el segundo mensaje porque el número no contiene decimales, por lo tanto, no se puede comprobar si el segundo decimal es un cero, pues 41.00 vale lo mismo que 41. Anteponiendo (int) al número, estoy haciendo un cast, lo cual genera que el valor sea convertido de forma temporal al tipo de dato especificado, que en este caso es integer o entero.

Saludos
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand
  #5 (permalink)  
Antiguo 15/01/2014, 08:21
 
Fecha de Ingreso: enero-2014
Mensajes: 6
Antigüedad: 10 años, 3 meses
Puntos: 0
Respuesta: Comprobar decimales

Yo me lio un poco con expresiones regulares, pero en este ejemplo tienes que solo valida cuando el usuario meta en la parte de enteros, cualquier numero, y en la parte de decimales dos digitos, ahora mismo lo del cero no se me ocurre nada, si tengo tiempo pienso algo

Editado:prueba con esta version: (preg_match('#^\d+(?:\.\d{1}\[1-9\s])?$#', $str, $match))



Código PHP:
$str '1004325.23';
if (
preg_match('#^\d+(?:\.\d{2})?$#'$str$match)){
   echo 
$match[0] . 'valido';
} else {
   echo 
$str ' no valido';


Última edición por pjnoguerol; 15/01/2014 a las 08:51

Etiquetas: Ninguno
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 18:32.