Blog
Actionscript3 convertir numeros ordinales a cardinales
3 years, 4 months ago Posted in: Blog Comments Off

Hoy me he pasado el tiempo creando esta clase actionscript3.
Converte numeros a ordinales o cardinales.

[as]
package com.mattimatti.util {

/**
* @author Matteo Monti http://www.mattimatti.com
*
* Clase utilidad para la conversión numeros a texto
* tanto a ordinales cuanto a cardinales.
*
* Clase portada da otra clase escrita en c# de Eugenio Serrano
* http://eugenioserrano.spaces.live.com/blog/cns!7E8BADFC2519C85F!288.entry
*
* @version 1.0;
*
*/
public class NumeroCastellano {

/**
* Convierte un numero a textual ordinal.
*
* @param number el numero que vamos a convertir.
* @param feminino convertir a femnino. Default a falso.
*
*/
public static function ordinal( number : Number, feminino : Boolean = false) : String {

if (number > 999999999) return “Numero demasiado grande”;

var _numbersInWords : Array =
[
"primero","segundo","tercero","cuarto","quinto","sexto","séptimo","octavo","noveno",
"décimo","undécimo","duodécimo","decimotercero","decimocuarto","decimoquinto","decimosexto","decimoséptimo","decimoctavo","decimonoveno",/*18*/
"vigésimo","trigésimo","cuadragésimo","quincuagésimo","sexagésimo","septuagésimo","octogésimo","nonagésimo",
"centésimo","ducentésimo","tricentésimo","cuadringentésimo","quingentésimo","sexcentésimo","septingentésimo","octingentésimo","noningentésimo",
"milésimo", "millonésimo"
];

var negative : String = “menos”;
var isNegative : Boolean = (number<0);

number = Math.abs(number);

var _centWord :String = "centavo(s)";
var _oneMillionWord :String = "millonésimo";
var _millionsWord :String = "millonésimo";
var _oneThousandWord :String = "milésimo";
var _thousandWord :String = "milésimo";
var _hundredWord :String = "centésimo";
var _oneHundredWord :String = "centésimo";
var _zeroWithWord :String = "cero con";
var _withWord :String = "con";
var _andWord :String = "y";
var hundreds : Number;
var tens : Number;
var units : Number;
var ActualNumber : Number = 0;
var Words : String = new String();

var FormattedNumberString : String = StringManipulator.zerofill(number, 9);
FormattedNumberString+=".00";
var DecimalSeparator : String = ".";

var decimalSeparatorLocation : Number = FormattedNumberString.indexOf(DecimalSeparator);
var millionsPart : Number = parseInt(FormattedNumberString.substr(0, 3));
var thousandsPart : Number = parseInt(FormattedNumberString.substr(3, 3));
var hundredsPart : Number = parseInt(FormattedNumberString.substr(6, 3));
var decimalsPart : Number = parseInt(FormattedNumberString.substr(decimalSeparatorLocation + 1, 2));

for (var NumberPart : Number = 1; NumberPart <= 4; NumberPart++)
{
switch (NumberPart)
{
case 1:
{
ActualNumber = millionsPart;
if (millionsPart == 1)
{
Words += _oneMillionWord;
Words +=" ";
continue;
}
break;
}
case 2:
{
ActualNumber = thousandsPart;
if (millionsPart != 1 && millionsPart != 0)
{
Words += _millionsWord;
Words+=" ";
}

if (thousandsPart == 1)
{
Words += _oneThousandWord;
Words+=" ";
continue;
}

break;
}
case 3:
{
ActualNumber = hundredsPart;
if (thousandsPart != 1 && thousandsPart != 0)
{
Words += _thousandWord;
Words+=" ";
}
break;
}
case 4:
{
ActualNumber = decimalsPart;
if (decimalsPart != 0)
{
if (millionsPart == 0 && thousandsPart == 0 && hundredsPart == 0)
{
Words += _zeroWithWord;
Words+=" ";
}
else
{
Words += _withWord;
Words+=" ";
}
}
break;
}
}

hundreds = Math.floor((ActualNumber / 100));
tens = Math.floor((ActualNumber - hundreds * 100) / 10);
units = Math.floor((ActualNumber - (hundreds * 100 + tens * 10)));
if (ActualNumber == 0) continue;

if (ActualNumber == 100)
{
Words += _oneHundredWord;
Words+=" ";
continue;
}
else
{
if (ActualNumber == 101 && NumberPart != 3)
{
Words += _oneHundredWord;
Words+=" ";
continue;
}
else
{
if (ActualNumber > 100)
{
Words += _numbersInWords[hundreds + 26];
Words+=” “;
}
}
}
// if (tens < 3 && tens != 0)
// {
// Words += _numbersInWords[tens * 10 + units - 1];
// Words+=" ";
// }
// else
// {
if (tens > 1)
{
Words += _numbersInWords[tens + 17];
// Words += ” “;
if (units == 0)continue;
//Words += _andWord;
//Words +=” “;
Words += _numbersInWords[units - 1];
// Words +=” ” ;
}

else if (tens == 1)
{
Words += _numbersInWords[tens + 8];
// Words += ” “;
if (units == 0)continue;
//Words += _andWord;
//Words +=” “;
Words += _numbersInWords[units - 1];
// Words +=” ” ;
}

else
{
if (thousandsPart > 1 && thousandsPart != 0){

Words += NumeroCastellano.cardinal(units);
}
else if (tens == 0 && units != 0)
{
Words += _numbersInWords[Math.abs(units) - 1];
Words+=” “;
}

}
}
if (decimalsPart != 0)Words += _centWord;

Words = Words.replace(“uno mil”, “un mil”);

var sexStr : String = (feminino) ? “a”:”o”;
Words = StringManipulator.trim(Words);
Words = StringManipulator.removeCharsFromEnd(Words,1);
Words += sexStr;

if(isNegative)Words = negative + ” ” + Words;

return Words;
}

/**
* Convierte un numero a textual cardinal.
*
* @param number el numero que vamos a convertir.
* @param feminino convertir a femnino. Default a falso.
*
*/
public static function cardinal( number : Number, feminino : Boolean = false) : String {

if (number > 999999999) return “Numero demasiado grande”;

var _numbersInWords : Array =
[
"un$", "dos", "tres", "cuatro", "cinco", "seis", "siete", "ocho", "nueve",
"diez", "once", "doce", "trece", "catorce", "quince", "dieciseis", "diecisiete", "dieciocho", "diecinueve",
"veinte", "veintiuno", "veintidos", "veintitres", "veinticuatro", "veinticinco", "veintiseis", "veintisiete", "veintiocho", "veintinueve",
"treinta", "cuarenta", "cincuenta", "sesenta", "setenta", "ochenta", "noventa",
"ciento", "doscientos", "trescientos", "cuatrocientos", "quinientos", "seiscientos", "setecientos", "ochocientos", "novecientos"
];

var negative : String = “menos”;
var isNegative : Boolean = (number<0);
number = Math.abs(number);

var _centWord :String = "centavo(s)";
var _oneMillionWord :String = "un millon";
var _millionsWord :String = "millones";
var _oneThousandWord :String = "un mil";
var _thousandWord :String = "mil";
var _hundredWord :String = "cien";
var _oneHundredWord :String = "ciento un";
var _zeroWithWord :String = "cero con";
var _withWord :String = "con";
var _andWord :String = "y";
var hundreds : Number;
var tens : Number;
var units : Number;
var ActualNumber : Number = 0;
var Words : String = new String();
var FormattedNumberString : String = StringManipulator.zerofill(number, 9);
FormattedNumberString+=".00";
var DecimalSeparator : String = ".";
var decimalSeparatorLocation : Number = FormattedNumberString.indexOf(DecimalSeparator);
var millionsPart : Number = parseInt(FormattedNumberString.substr(0, 3));
var thousandsPart : Number = parseInt(FormattedNumberString.substr(3, 3));
var hundredsPart : Number = parseInt(FormattedNumberString.substr(6, 3));
var decimalsPart : Number = parseInt(FormattedNumberString.substr(decimalSeparatorLocation + 1, 2));

for (var NumberPart : Number = 1; NumberPart <= 4; NumberPart++)
{
switch (NumberPart)
{
case 1:
{
ActualNumber = millionsPart;
if (millionsPart == 1)
{
Words += _oneMillionWord;
Words +=" ";
continue;
}
break;
}
case 2:
{
ActualNumber = thousandsPart;
if (millionsPart != 1 && millionsPart != 0)
{
Words += _millionsWord;
Words+=" ";
}
if (thousandsPart == 1)
{
Words += _oneThousandWord;
Words+=" ";
continue;
}
break;
}
case 3:
{
ActualNumber = hundredsPart;
if (thousandsPart != 1 && thousandsPart != 0)
{
Words += _thousandWord;
Words+=" ";
}
break;
}
case 4:
{
ActualNumber = decimalsPart;
if (decimalsPart != 0)
{
if (millionsPart == 0 && thousandsPart == 0 && hundredsPart == 0)
{
Words += _zeroWithWord;
Words+=" ";
}
else
{
Words += _withWord;
Words+=" ";
}
}
break;
}
}

hundreds = Math.floor((ActualNumber / 100));
tens = Math.floor((ActualNumber - hundreds * 100) / 10);
units = Math.floor((ActualNumber - (hundreds * 100 + tens * 10)));
if (ActualNumber == 0) continue;

if (ActualNumber == 100)
{
Words += _hundredWord;
Words+=" ";
continue;
}
else
{
if (ActualNumber == 101 && NumberPart != 3)
{
Words += _oneHundredWord;
Words+=" ";
continue;
}
else
{
if (ActualNumber > 100)
{
Words += _numbersInWords[hundreds + 35];
Words+=” “;
}
}
}
if (tens < 3 && tens != 0)
{
Words += _numbersInWords[tens * 10 + units - 1];
Words+=" ";
}
else
{
if (tens > 2)
{
Words += _numbersInWords[tens + 26];
Words += ” “;
if (units == 0)continue;
Words += _andWord;
Words +=” “;
Words += _numbersInWords[units - 1];
Words +=” ” ;
}
else
{
if (tens == 0 && units != 0)
{
Words += _numbersInWords[units - 1];
Words+=” “;
}
}
}
}
if (decimalsPart != 0)Words += _centWord;
Words = Words.replace(“uno mil”, “un mil”);
var sexStr : String = (feminino) ? “a”:”o”;
Words = Words.replace(“$”, sexStr);
Words = StringManipulator.trim(Words);

if(isNegative)Words = negative + ” ” + Words;

return Words;
}
}
}
[/as]

NumeroCastellano.as

Comments are closed.