elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: ¿Eres nuevo? ¿Tienes dudas acerca del funcionamiento de la comunidad? Lee las Reglas Generales


+  Foro de elhacker.net
|-+  Programación
| |-+  Desarrollo Web
| | |-+  PHP (Moderador: #!drvy)
| | | |-+  number_format() y numeros enteros (Solucionado)
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: number_format() y numeros enteros (Solucionado)  (Leído 14,543 veces)
Littl3

Desconectado Desconectado

Mensajes: 239


Tarde o temprano aparece el hombre


Ver Perfil
number_format() y numeros enteros (Solucionado)
« en: 14 Octubre 2010, 10:09 am »

Hola,

Tengo un problema a la hora de mostrar un resultado numerico, quiero mostrar $resultado usando number_format para añadir un . como separador de miles y una , para los decimales, hasta aqui todo bien, ahora bien al usar number format tienes que indicar cuantos decimales quieres mostrar, yo le indico que 4 pero claro si se trata de un numero entero me muestra... 1234,0000 ...  Claro me saca 4 decimales a 0 totalmente inutiles, yo lo que quiero es que si es un entero no me muestre decimales y si tiene decimales como maximo que me muestre 4.

 echo number_format($resultado, 4, ',', '.');

Gracias, un saludo.


« Última modificación: 14 Octubre 2010, 17:21 pm por Littl3 » En línea

xassiz~


Desconectado Desconectado

Mensajes: 457



Ver Perfil WWW
Re: number_format() y numeros enteros
« Respuesta #1 en: 14 Octubre 2010, 14:39 pm »

is_float()


En línea

~ Yoya ~
Wiki

Desconectado Desconectado

Mensajes: 1.125



Ver Perfil
Re: number_format() y numeros enteros
« Respuesta #2 en: 14 Octubre 2010, 15:25 pm »

Ejemplo:

Código
  1. <?php
  2.  
  3. $numeros = array(1234.56, 50000, 1258.364, 10000221, 3000.24);
  4.  
  5. foreach($numeros as $numeros){
  6. $result = is_int($numeros) ? number_format($numeros) : (number_format($numeros, 4, ',', '.'));
  7. echo "$result<br />";
  8. }
  9.  
  10. ?>
  11.  

Salida:
Código:
1.234,5600
50,000
1.258,3640
10,000,221
3.000,2400
« Última modificación: 14 Octubre 2010, 15:28 pm por ~ Yoya ~ » En línea

Mi madre me dijo que estoy destinado a ser pobre toda la vida.
Engineering is the art of balancing the benefits and drawbacks of any approach.
Littl3

Desconectado Desconectado

Mensajes: 239


Tarde o temprano aparece el hombre


Ver Perfil
Re: number_format() y numeros enteros
« Respuesta #3 en: 14 Octubre 2010, 15:33 pm »

Gracias pablomi pero el is_float solo me sirve para saber si se trata de un numero entero.

Yoya tu codigo me puede ayudar aun así no es exactamente lo que necesito, en tu caso si uno de los numeros contiene un solo decimal, le añade 3 zeros a la derecha tal y como le indicas en el number float.

La idea es poder formatear la salida del numero añadiendo separador de miles y separador de decimales y permitir un maximo de 4 decimales, seguire buscando si encuentro la solución la posteo, un saludo.
En línea

~ Yoya ~
Wiki

Desconectado Desconectado

Mensajes: 1.125



Ver Perfil
Re: number_format() y numeros enteros
« Respuesta #4 en: 14 Octubre 2010, 15:39 pm »

puedes poner un ejemplo de como quieres que salga...
En línea

Mi madre me dijo que estoy destinado a ser pobre toda la vida.
Engineering is the art of balancing the benefits and drawbacks of any approach.
Littl3

Desconectado Desconectado

Mensajes: 239


Tarde o temprano aparece el hombre


Ver Perfil
Re: number_format() y numeros enteros
« Respuesta #5 en: 14 Octubre 2010, 16:08 pm »

Por supuesto,

Se trata de limitar a 4 el maximo de decimales permitidos, no obstante si el numero es entero o solo tiene una o dos posciones decimales no necesito que la tercera y la cuarta posición se rellenen con 0, a esto hay que añadir el '.' como separador de miles y la ',' como separador de decimales.

Para limitar a 4 el maximo de decimales permitidos se puede hacer con round pero si lugo quiero añadirle el separador de miles y decimales del maravilloso number_format tengo que indicarle a este cuantos decimales quiero y la función rellena las posiciones con zeros de forma obligada en caso de que no exista el decimal.

Pongo unos ejemplos de como quiero el formateo, creo que no me voy a librar de hacer una función especifica para esto, un saludo.

  • 4244,394144 --> 4.244,3941
  • 4244 --> 4.244
  • 3455,540 --> 3.455,54
  • 4322,1000 --> 4.322,1


Código:
number_format($resultado, 4, ',', '.')
En línea

~ Yoya ~
Wiki

Desconectado Desconectado

Mensajes: 1.125



Ver Perfil
Re: number_format() y numeros enteros
« Respuesta #6 en: 14 Octubre 2010, 16:38 pm »

Cree una función para hacer esto, solo había que hacer algunos cambios.

Funcion:
Código
  1. <?php
  2. function format($num)
  3. {
  4.   if(is_int($num))
  5.   {
  6.      $number = number_format($num);
  7.      $number = preg_replace('/\,/','.',$number);
  8.      return $number;
  9.   }
  10.   else{
  11.           $num = preg_replace('/\,/','.',$num);
  12.           $result =  number_format($num, 4, ',', '.');
  13.  
  14.           $result = preg_replace('/0*$/','',$result);
  15.           return $result;
  16.  
  17.        }
  18. }
  19.  
  20. ?>

Ejemplo:

Código
  1. <?php
  2.  
  3. function format($num)
  4. {
  5.   if(is_int($num))
  6.   {
  7.      $number = number_format($num);
  8.      $number = preg_replace('/\,/','.',$number);
  9.      return $number;
  10.   }
  11.   else{
  12.           $num = preg_replace('/\,/','.',$num);
  13.           $result =  number_format($num, 4, ',', '.');
  14.  
  15.           $result = preg_replace('/0*$/','',$result);
  16.           return $result;
  17.  
  18.        }
  19. }
  20.  
  21. $numeros = array('4244,394144', 4244, '3455,540', '4322,1000');
  22.  
  23. foreach($numeros as $numeros){
  24. echo "$numeros --> ".format($numeros)."<br />";
  25. }
  26.  
  27. ?>
  28.  
  29.  

Salida:
Código:
4244,394144 --> 4.244,3941
4244 --> 4.244
3455,540 --> 3.455,54
4322,1000 --> 4.322,1
« Última modificación: 14 Octubre 2010, 16:40 pm por ~ Yoya ~ » En línea

Mi madre me dijo que estoy destinado a ser pobre toda la vida.
Engineering is the art of balancing the benefits and drawbacks of any approach.
Littl3

Desconectado Desconectado

Mensajes: 239


Tarde o temprano aparece el hombre


Ver Perfil
Re: number_format() y numeros enteros
« Respuesta #7 en: 14 Octubre 2010, 17:16 pm »

Muchas gracias Yoya pero acabo de terminar mi función con cuatro líneas,  la adjunto por si a alguien le sirve.

Código
  1. <php
  2. function number_format_sin_zeros($valor)
  3. {
  4. $decimales = strlen(strrchr($valor, "."))-1; //Cuento posiciones decimales
  5. if($decimales == -1){$decimales=0;} //Si no existe el punto, decimales = 0
  6. if($decimales > 4){$decimales = 4;} //Si la cifra tiene mas de 4 decimales muestro solo 4
  7. return number_format($valor, $decimales, ',', '.'); //El numero de decimales
  8. }
  9. ?>
  10.  
En línea

~ Yoya ~
Wiki

Desconectado Desconectado

Mensajes: 1.125



Ver Perfil
Re: number_format() y numeros enteros (Solucionado)
« Respuesta #8 en: 14 Octubre 2010, 17:25 pm »

Error...

Código
  1. <?php
  2.  
  3. function number_format_sin_zeros($valor)
  4. {
  5. $decimales = strlen(strrchr($valor, "."))-1; //Cuento posiciones decimales
  6. if($decimales == -1){$decimales=0;} //Si no existe el punto, decimales = 0
  7. if($decimales > 4){$decimales = 4;} //Si la cifra tiene mas de 4 decimales muestro solo 4
  8. return number_format($valor, $decimales, ',', '.'); //El numero de decimales
  9. }
  10.  
  11. $numeros = array('4244,394144', 4244, '3455,540', '4322,1000');
  12.  
  13. foreach($numeros as $numeros){
  14. echo "$numeros --> ".number_format_sin_zeros($numeros)."<br />";
  15. }
  16.  
  17. ?>
Código:
Notice: A non well formed numeric value encountered in /var/www/html/pruebas.php on line 8 4244,394144 --> 4.244
4244 --> 4.244
Notice: A non well formed numeric value encountered in /var/www/html/pruebas.php on line 8 3455,540 --> 3.455
Notice: A non well formed numeric value encountered in /var/www/html/pruebas.php on line 8 4322,1000 --> 4.322
En línea

Mi madre me dijo que estoy destinado a ser pobre toda la vida.
Engineering is the art of balancing the benefits and drawbacks of any approach.
Littl3

Desconectado Desconectado

Mensajes: 239


Tarde o temprano aparece el hombre


Ver Perfil
Re: number_format() y numeros enteros (Solucionado)
« Respuesta #9 en: 14 Octubre 2010, 17:32 pm »

Eso es porque en php se utiliza el punto por defecto para el separador de decimales en vez de la coma, ademas la funcion funciona a la perfeccion trabajando con valores numericos y no con strings.

Prueba esto:

$numeros = array(4244.394144, 4244, 3455.540, 4322.1000);

Un saludo y gracias por el interés.
En línea

Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines