Portada | Monotemáticos | Secciones | Desarrolladores | Comunidad | Servicios | Servicios profesionales | RSS
Desde 0 | HTML | CSS | ASP | PHP | AJAX | Javascript | Diseño web | Promoción web | Ganar dinero
Directorio | Manuales | Scripts | FAQs | Programas | Artículos Copyleft | Actualidad | La Cosecha | Colabora
Registrarse | Vuestras páginas | Foros del web | Lista de correo | Boletín de novedades
Generador METAs | Compras | Busca cursos
Alojamiento | Dominios.es | Micropagos SMS | Buscadores | Patentes, marcas | Creación web | Multimedia | Videos
Desarrollo Freelance | Buscar proyectos | Buscar profesionales | Solicitar desarrollo

Transformar números con dígitos a palabras


Script Perl con el que podemos pasar de un numero, escrito con dígitos, al mismo número, escrito con palabras.


18/11/04 - Podemos ver en este artículo un ejemplo de código realizado en Perl. Sirve para convertir números, escritos con dígitos, en números escritos con palabras. El ejercicio en si no está muy explicado. No obstante, disponemos de ciertos comentarios en el código que pueden ayudarnos a entenderlo mejor.

sub conv_num_a_pal {
# Recibe numero real positivo de la forma:
# 12345.5678
# y lo devuelve en palabras:
# doce mil trescientos cuarenta y cinco coma cinco seis siete ocho.
# Los decimales los transforma a la palabra correspondiente de cada digito y no usa unidades de mil, centenas ni decenas.

my ($num) = $_[0];
my ($num_aux, $pal, @unid, @dec, @cent, $resul, $i, @decimas);
my ($dig, $entero, $centavos, $num_bloques, $primer_dig, $segundo_dig, $tercer_dig, $bloque, $bloque_cero);

@unid = ('cero', 'uno', 'dos','tres', 'cuatro', 'cinco', 'seis', 'siete', 'ocho', 'nueve', 'diez', 'once', 'doce', 'trece', 'catorce' , 'quince' , 'dieciseis' , 'diecisiete' , 'dieciocho' , 'diecinueve', 'veinte', 'ventiun', 'veintidos', 'veintitres', 'veinticuatro', 'veinticinco', 'veintiseis', 'veintisiete', 'veintiocho', 'veintinueve');
@dec = ('', 'diez', 'veinte', 'treinta', 'cuarenta', 'cincuenta', 'sesenta', 'setenta', 'ochenta', 'noventa');
@cent = ('', 'ciento', 'doscientos', 'trescientos', 'cuatrocientos', 'quinientos', 'seiscientos', 'setecientos', 'ochocientos', 'novecientos');

$num_aux = $num;
$entero = int($num_aux);

$centavos = $num_aux;
$centavos =~ s/^\d+.//s;

$resul = 'cero' if $entero == 0;
$num_bloques = 1;

while ($entero > 0) {
$primer_dig = 0;
$segundo_dig = 0;
$tercer_dig = 0;
$bloque = '';
$bloque_cero = 0;
$i = 0;
for (1..3) {
$i++;
$dig = $entero - (int($entero / 10) * 10);

if ($dig != 0) {
if ($i == 1) {
$bloque = ' ' . $unid[$dig];
$primer_dig = $dig;
}
elsif ($i == 2) {
if ($dig <= 2) {
$bloque = ' ' . $unid[$dig * 10 + $primer_dig];
}
else {
$bloque = ' ' . $dec[$dig] . ($primer_dig != 0 ? ' y' : '') . $bloque;
};

$segundo_dig = $dig;
}
elsif ($i == 3) {
$bloque = ' ' . (($dig == 1 and $primer_dig == 0 and $segundo_dig == 0) ? 'cien' : $cent[$dig]) . $bloque;
$tercer_dig = $dig;
};
}
else {
$bloque_cero++;
};

$entero = int($entero / 10);

last if $entero == 0;
};

if ($num_bloques == 1) {
$resul = $bloque;
}
elsif ($num_bloques == 2) {
$resul = $bloque . ($bloque_cero != 3 ? ' mil' : '') . $resul;
}
elsif ($num_bloques == 3) {
$resul = $bloque . (($primer_dig == 1 and $segundo_dig == 0 and $tercer_dig == 0) ? ' millón' : ' millones') . $resul;
}
elsif ($num_bloques == 4) {
$resul = $bloque . ($bloque_cero != 3 ? ' mil' : '') . $resul;
}
elsif ($num_bloques == 5) {
$resul = $bloque . (($primer_dig == 1 and $segundo_dig == 0 and $tercer_dig == 0) ? ' billón' : ' billones') . $resul;
};

$num_bloques++;
};

$resul = &trim($resul);

if ($centavos ne '') {
$resul .= ' coma ';
$centavos = 0 if $centavos == 0;
@decimas = split('', $centavos);

for ($i = 0; $#decimas >= $i; $i++) {
$resul .= $unid[$decimas[$i]] . ' ';
};
};

return &trim($resul);
}; # conv_num_a_pal.

# ----------------------------------------------------
sub trim {
    my $valor = $_[0];
    $valor =~ s/^\s*//;
    $valor =~ s/\s*$//;
    return $valor;
}; # trim.

 Seguir navegando a partir aquí:

+ 1 categoria relacionada
+ 6 comentarios no revisados

 Autoría, licencia y acciones sobre este artículo

Informe de Marcelo Cortés*

Atención: Copyright. Este artículo no se puede reproducir sin la autorización expresa del autor.

* Para consultas técnicas utilizar la lista de correo.

Versión imprimible Versión imprimible del artículo
Enviar artículo por e-mail Enviar artículo por e-mail
Añadir un comentario al artículo Publicar un comentario del artículo

Categorias relacionadas
A través de las categorías de nuestro directorio se pueden encontrar otro tipo de recursos relacionados con este artículo:
+ Entrar en Perl


 Comentarios sin revisar
Entre los comentarios no revisados puede haber algunos interesantes que se hayan enviado recientemente.
 Se han encontrado 6 comentarios sin revisar

Ver el comentario no revisadoVer los comentarios no revisados
Añadir un comentario al artículo Añadir un comentario del artículo



Enlaces:
Maestrosdelweb
  Ir arriba

Categorías
+Perl

Tienda DesarrolloWeb

DesarrolloWeb.com | Copyright | Anunciese | Acerca de | Datos legales | Contacta | Por GuiarteMultimedia