Podrías también hacer un bucle para toda la longitud del número, contando de 3 en 3 y agregando el carácter del separador de miles.
Using perl Syntax Highlighting
$x = "12345678.344";
$num = int($x); # Nos quedamos con la parte entera
$dec = rindex($x,"."); # Buscamos dónde empieza la parte decimal
$n = join "",reverse split //, $num; # Damos la vuelta al número
$m = ""; # Aquí guardaremos el resultado
while ($n =~ m/(\d{1,3})/g ) # Para todo el número, buscamos bloques de entre 1 y 3 dígitos
{
$m .= "$1,"; # Guardamos ese bloque más un separador de miles
}
$m = join "",reverse split //, $m; # Volvemos a dar la vuelta al calcetín. Perdón, al número
$m = substr( $m,1); # Quitamos el último separador de miles, pues sobra
print $m; # Pintamos la parte entera, con los separadores
print substr($x,$dec) unless $dec == -1; # Pintamos los decimales si existían
print "\n";
Coloreado en 0.005 segundos, usando
GeSHi 1.0.8.4
Otra forma es utilizando substr() en el lado izquierdo.
Using perl Syntax Highlighting
$x = "56789";
# Bucle para toda la longitud del número, empezando en la parte derecha, menos 3 (primer bloque de dígitos)
# y viendo cada 3 dígitos hacia la parte izquierda
for( $i=length($x)-3; $i>0; $i-=3 )
{
# En esa posición metemos un separador de miles
substr($x,$i,0) = ",";
}
print "$x\n";
Coloreado en 0.002 segundos, usando
GeSHi 1.0.8.4
Otra forma es usando printf() con el modificador ('). Por ejemplo,
printf("%'.2f", 1234567.89) con el
locale puesto a
da_DK genera
1.234.567,89.
Lo malo es que esto no funciona en todos los sistemas.
Otra forma... con un módulo...
Number::Format:
Using perl Syntax Highlighting
use Number::Format;
my $numero = "123456789";
my $formato = new Number::Format(
-thousands_sep => '.',
-decimal_point => ',',
);
my $formateado = $formato->format_number($numero);
print $formateado,"\n";
Coloreado en 0.001 segundos, usando
GeSHi 1.0.8.4
Última edición por explorer39 el 2005-11-05 13:56 @622, editado 2 veces en total