elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.
 
Inicio Ayuda Buscar Ingresar Registrarse
28 Mayo 2012, 04:20  


Tema destacado: Recuerda que debes registrarte en el foro para poder participar (preguntar y responder)

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

Desconectado Desconectado

Mensajes: 224


Tarde o temprano aparece el hombre


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

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 por Littl3 » En línea

xassiz~


Desconectado Desconectado

Mensajes: 428



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

is_float()


En línea

~ Yoya ~
Wiki

Desconectado Desconectado

Mensajes: 954



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

Ejemplo:

Código
<?php
 
$numeros = array(1234.56, 50000, 1258.364, 10000221, 3000.24);
 
foreach($numeros as $numeros){
$result = is_int($numeros) ? number_format($numeros) : (number_format($numeros, 4, ',', '.'));
echo "$result<br />";
}
 
?>
 

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 por ~ Yoya ~ » En línea

Littl3

Desconectado Desconectado

Mensajes: 224


Tarde o temprano aparece el hombre


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

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: 954



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

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

Littl3

Desconectado Desconectado

Mensajes: 224


Tarde o temprano aparece el hombre


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

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: 954



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

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

Funcion:
Código
<?php
function format($num)
{
  if(is_int($num))
  {
     $number = number_format($num);
     $number = preg_replace('/\,/','.',$number);
     return $number;
  }
  else{
          $num = preg_replace('/\,/','.',$num);
          $result =  number_format($num, 4, ',', '.');
 
          $result = preg_replace('/0*$/','',$result);
          return $result;
 
       }
}
 
?>

Ejemplo:

Código
<?php
 
function format($num)
{
  if(is_int($num))
  {
     $number = number_format($num);
     $number = preg_replace('/\,/','.',$number);
     return $number;
  }
  else{
          $num = preg_replace('/\,/','.',$num);
          $result =  number_format($num, 4, ',', '.');
 
          $result = preg_replace('/0*$/','',$result);
          return $result;
 
       }
}
 
$numeros = array('4244,394144', 4244, '3455,540', '4322,1000');
 
foreach($numeros as $numeros){
echo "$numeros --> ".format($numeros)."<br />";
}
 
?>
 
 

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 por ~ Yoya ~ » En línea

Littl3

Desconectado Desconectado

Mensajes: 224


Tarde o temprano aparece el hombre


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

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

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

~ Yoya ~
Wiki

Desconectado Desconectado

Mensajes: 954



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

Error...

Código
<?php
 
function number_format_sin_zeros($valor)
{
$decimales = strlen(strrchr($valor, "."))-1; //Cuento posiciones decimales
if($decimales == -1){$decimales=0;} //Si no existe el punto, decimales = 0
if($decimales > 4){$decimales = 4;} //Si la cifra tiene mas de 4 decimales muestro solo 4
return number_format($valor, $decimales, ',', '.'); //El numero de decimales
}
 
$numeros = array('4244,394144', 4244, '3455,540', '4322,1000');
 
foreach($numeros as $numeros){
echo "$numeros --> ".number_format_sin_zeros($numeros)."<br />";
}
 
?>
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

Littl3

Desconectado Desconectado

Mensajes: 224


Tarde o temprano aparece el hombre


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

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

~ Yoya ~
Wiki

Desconectado Desconectado

Mensajes: 954



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

Sip, tenia el mismo problema por eso implemente  preg_replace('/\,/','.' xD.

No pasa nada...

Saludos.
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
¿Error en mi BAT? Multiplicar números [Solucionado]
Scripting
_Sergi_ 2 1,503 Último mensaje 10 Febrero 2011, 22:45
por _Sergi_
Desbordamiento de enteros en PHP 5.x
Noticias
wolfbcn 0 667 Último mensaje 29 Abril 2011, 13:47
por wolfbcn
mantisa,numeros reales,enteros caracter
Programación C/C++
mxsoun 1 617 Último mensaje 5 Septiembre 2011, 19:25
por Eternal Idol
TextBox que solo acepta números enteros o de punto flotante [¿Aporte?]
.NET
Xavelets 3 1,307 Último mensaje 21 Septiembre 2011, 23:38
por Xavelets
Código fuente para sumar números enteros aleatorios
Programación C/C++
UmbraNoche 5 308 Último mensaje 4 Abril 2012, 00:41
por do-while
Powered by SMF 1.1.16 | SMF © 2006-2008, Simple Machines