Blog
Actionscript3 convertir numeros ordinales a cardinales
Hoy me he pasado el tiempo creando esta clase actionscript3.
Converte numeros a ordinales o cardinales.
Actionscript:
-
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;
-
}
-
}
-
}

Xing
LinkedIn
Delicious
Flickr