NAME

Lingua::ES::Numeros - Convierte números a texto en Español (Castellano)

SYNOPSIS

use Lingua::ES::Numeros

$obj = new Lingua::ES::Numeros ('MAYUSCULAS' => 1)
print $obj->Cardinal(124856), "\n";
print $obj->Real(124856.531), "\n";
$obj->{SEXO} = 'a';
print $obj->Ordinal(124856), "\n";

REQUIERE

Perl 5.004, Exporter, Carp

DESCRIPTION

Lingua::ES::Numeros convierte números de precisión arbitraria en su representación textual en castellano. Tiene soporte para la representación de cardinales, ordinales y reales. Como los números manejados tienen mayor rango que el manejo númeríco nativo de Perl, estos se manejan como cadenas de caracteres, permitiendo así el crecimiento ilimitado del sistema de conversión.

MÉTODOS DE CLASE

parse_num($num, $dec, $sep)

Descompone el número en sus diferentes partes y retorna una lista con las mismas, por ejemplo:

use Linugua::ES::Numeros qw( :All );
($sgn, $ent, $frc, $exp) = parse_num('123.45e10', '.', '",');

Parámetros

$num

El número a traducir

$dec

El separador de decimales.

$sep

Los caracteres separadores de miles, millones, etc.

Valores de retorno

$sgn

Signo, puede ser -1 si está presente el signo negativo, 1 si está presente el signo negativo y 0 si no hay signo presente.

$ent

Parte entera del número, solo los dígitos más significativos (ver $exp)

$frc

Parte fraccional del número, solo los dígitos menos significativos (ver $exp)

$exp

Exponente del número, si es > 0, dicta el número de ceros que sigue a la parte entera, si es < 0, dicta el número de ceros que están entre el punto decimal y la parte fraccional.

Este método no se exporta implicitamente, asi que debe ser importado con cualquiera de las siguientes sintaxis:

use Lingua::ES::Numeros qw(parse_num);
use Lingua::ES::Numeros qw(:All);

CAMPOS

El objeto contiene los siguientes campos que alteran la conversión.

DECIMAL

Especifíca la cadena de caracteres que se utilizará para separar la parte entera de la parte fraccional del número a convertir. El valor por defecto de DECIMAL es '.'

SEPARADORES

Cadena de caracteres que contiene todos los caracteres de formato del número. Todos los caracteres de esta cadena serán ignorados por el parser que descompone el número. El valor por defecto de SEPARADORES es ',"_'

ACENTOS

Afecta la ortografía de los números traducidos, si es falso la representación textual de los números no tendrá acentos, el valor predeterminado de este campo es 1 (con acentos). Esté campo puede ser de mucha utilidad si el conjunto de caracteres utilizado no es el Latin1, ya que los acentos dependen de él en esta versión (ver PROBLEMAS).

MAYUSCULAS

Si es cierto, la representación textual del número será una cadena de caracteres en mayúsculas, el valor predeterminado de este campo es 0 (en minúsculas)

HTML

Si es cierto, la representación textual del número será una cadena de caracteres en HTML (los acentos estarán representados por las respectivas entidades HTML). El valor predeterminado es 0 (texto).

SEXO

El sexo de los números, puede ser: 'a', 'o' o '', para números en femenino, masculino o neutro respectivamente. El valor por defecto de este campo es 'o'.

+---+--------------------+-----------------------------+
|Nú |     CARDINALES     |          ORDINALES          |
|me +------+------+------+---------+---------+---------+
|ro | 'o'  | 'a'  |  ''  |   'o'   |   'a'   |   ''    |
+---+------+------+------+---------+---------+---------+
| 1 | uno  | una  | un   | primero | primera | primer  |
| 2 | dos  | dos  | dos  | segundo | segunda | segundo |
| 3 | tres | tres | tres | tercero | tercera | tercer  |
+---+------+------+------+---------+---------+---------+
UNMIL

Este campo solo afecta la traduccion de cardinales y cuando es cierto, el número 1000 se traduce como 'un mil', de otro modo se traduce simplemente 'mil'. El valor por defecto de UNMIL es 1.

NEGATIVO

La cadena de caracteres que contiene el nombre con el que se traducirá el signo negativo (-), por defecto vale 'menos'.

POSITIVO

La cadena de caracteres que contiene el nombre con el que se traducirá el signo positivo (+), por defecto vale ''. Esta cadena sólo es añadida al número en presencia del signo '+', de otro modo no se agrega aunque el número se asume positivo.

FORMATO

Una cadena de caracteres que especifíca como se deben traducir los decimales de un número real. Su valor por defecto es 'con %02d ctms.' (ver el método real).

CONSTRUCTOR

Para construir un objeto Lingua::ES::Numeros, se utiliza el método de clase new, este método puede recibir como parámetro cualesquiera de los campos mencionados en la sección anterior.

Ejemplos:

      use Lingua::ES::Numeros;
      
      # usa los valores predeterminados de los campos
      $obj = new Lingua::ES::Numeros; 
      
      # especifíca los valores de algunos campos
      $obj = Lingua::ES::Numeros::->new( 'ACENTOS'    => 0, 
                                         'MAYUSCULAS' => 1,
                                         'SEXO'       => 'a',
					 'DECIMAL'    => ',',
					 'SEPARADORES'=> '"_' );

MÉTODOS DEL OBJETO

$n = cardinal($n)

Convierte el número $n, como un número cardinal a castellano.

La conversión esta afectada por los campos: DECIMAL, SEPARADORES, SEXO, ACENTOS, MAYUSCULAS, POSITIVO y NEGATIVO.

Esta conversión ignora la parte fraccional del número, si la tiene.

$n = real($n [, $fsexo])

Convierte el número $n, como un número real a castellano.

El parámetro opcional $fsexo se utiliza para especificas un sexo diferente para la parte decimal, recibe los mismos valores que se le pueden asignar al campo SESO, pero el sexo neutro equivale a masculino en la parte fraccional, si es omitido se usará el valor del campo SEXO.

La conversión esta afectada por los campos: DECIMAL, SEPARADORES, SEXO, ACENTOS, MAYUSCULAS, POSITIVO y NEGATIVO.

Formato de la parte fraccional (FORMATO)

Además esta conversión utiliza el campo FORMATO para dirigir la conversión de la parte fraccional del número real. Este campo es un formato estilo sprintf que solo tiene una especificación de formato precedida por '%'. Además las dos únicas especificaciones válidas por ahora son:

%s

Incluye la representación textual de la parte fraccional dentro del formato. Por ejemplo, convertir '123.345' con formato 'más %s.' resultará en el número: CIENTO VEINTITRÉS Y TRECIENTOS CUARENTA MÁS CINCO MILÉSIMAS.

%Nd

Incluye la representación numérica de la parte fraccional, donde N es una especificación del formato '%d' de sprintf. Por ejemplo, convertir '123.345' con formato ' con %02d ctms.' producirá: CIENTO VEINTITRÉS Y TRECIENTOS CUARENTA CON 34 CTMS.

$n = ordinal($n)

Convierte el número $n, como un número ordinal a castellano.

La conversión esta afectada por los campos: DECIMAL, SEPARADORES, SEXO, ACENTOS y MAYUSCULAS.

Presenta advertencias si el número es negativo y/o si no es un natural > 0.

DIAGNÓSTICOS

Número ilegal.

El número tiene un error sintáctico.

Número fuera de rango.

La parte entera del número es demasiado grande. Por el momento solo se aceptan números de hasta 10**126 - 1, pues no se cual es la representación textual de números >= 10**126. Cualquier ayuda o corrección será bien recibida.

Número fuera de precisión.

La parte fraccional del número es menor que 10**-126 y no se puede traducir por los motivos antes mencionados.

Ordinal negativo

El número a convertir en ordinal es negativo.

Ordinal con decimales

El número a convertir en ordinal tiene decimales.

AUTOR

José Luis Rey Barreira <jrey@mercared.com>

PROBLEMAS

La conversión a mayúsculas se está haciendo actualmente mediante una transliteración para poder convertir los caracteres acentuados. El problema es que esto no funcionará si el conjunto de caracteres en uso es distinto al ISO 8859-1 (Latin1) o al ISO 8859-15.

Las alternativas a este problema serían: la utilización de Perl 5.6 o superior con 'utf8', pero restringo el uso del módulo a una gran cantidad de usuarios que todavía usan Perl 5.00x, por otra parte podría utilizar locales, pero no se si estos funcionan exactamente igual en Unix, Windows, BeOS, etc. así que creo que la transliteración es adecuada por ahora.

LICENCIA

Este código es propiedad intelectual de José Rey y se distribuye según los términos de la Licencia Pública General del proyecto GNU, cuya letra y explicación se pueden encontrar en inglés en la página http://www.gnu.org/licenses/licenses.html y de la que cual hay una traducción al castellano en http://lucas.hispalinux.es/Otros/gples/gples.html

5 POD Errors

The following errors were encountered while parsing the POD:

Around line 3:

Non-ASCII character seen before =encoding in 'números'. Assuming CP1252

Around line 275:

You forgot a '=back' before '=head2'

Around line 323:

=back without =over

Around line 587:

You forgot a '=back' before '=head2'

Around line 660:

'=item' outside of any '=over'