Blog
Actionscript3 convertir numeros ordinales a cardinales
9 years ago Posted in: Blog Comments Off

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

Actionscript:
  1. package com.mattimatti.util {
  2.  
  3.     /**
  4.      * @author Matteo Monti http://www.mattimatti.com
  5.      *
  6.      * Clase utilidad para la conversión numeros a texto
  7.      * tanto a ordinales cuanto a cardinales.
  8.      *
  9.      * Clase portada da otra clase escrita en c# de Eugenio Serrano
  10.      * http://eugenioserrano.spaces.live.com/blog/cns!7E8BADFC2519C85F!288.entry
  11.      *
  12.      * @version 1.0;
  13.      *
  14.      */
  15.     public class NumeroCastellano {
  16.  
  17.  
  18.         /**
  19.          * Convierte un numero a textual ordinal.
  20.          *
  21.          * @param number el numero que vamos a convertir.
  22.          * @param feminino convertir a femnino. Default a falso.
  23.          *
  24.          */
  25.         public static function  ordinal( number : Number, feminino : Boolean = false) : String {
  26.  
  27.             if (number> 999999999) return "Numero demasiado grande";
  28.  
  29.             var _numbersInWords : Array =
  30.                 [
  31.                 "primero","segundo","tercero","cuarto","quinto","sexto","séptimo","octavo","noveno",
  32.                 "décimo","undécimo","duodécimo","decimotercero","decimocuarto","decimoquinto","decimosexto","decimoséptimo","decimoctavo","decimonoveno",/*18*/
  33.                 "vigésimo","trigésimo","cuadragésimo","quincuagésimo","sexagésimo","septuagésimo","octogésimo","nonagésimo",
  34.                 "centésimo","ducentésimo","tricentésimo","cuadringentésimo","quingentésimo","sexcentésimo","septingentésimo","octingentésimo","noningentésimo",
  35.                 "milésimo", "millonésimo"
  36.                 ];
  37.  
  38.             var negative : String = "menos";
  39.             var isNegative : Boolean = (number<0);
  40.            
  41.             number = Math.abs(number);
  42.            
  43.             var  _centWord :String = "centavo(s)";
  44.             var  _oneMillionWord :String = "millonésimo";
  45.             var  _millionsWord :String = "millonésimo";
  46.             var  _oneThousandWord :String = "milésimo";
  47.             var  _thousandWord :String = "milésimo";
  48.             var  _hundredWord :String = "centésimo";
  49.             var  _oneHundredWord :String = "centésimo";
  50.             var  _zeroWithWord :String = "cero con";
  51.             var  _withWord :String = "con";
  52.             var  _andWord :String = "y";
  53.             var hundreds : Number;
  54.             var tens : Number;
  55.             var units : Number;
  56.             var ActualNumber : Number = 0;
  57.             var Words : String = new String();
  58.            
  59.             var FormattedNumberString : String = StringManipulator.zerofill(number, 9);
  60.              FormattedNumberString+=".00";
  61.             var DecimalSeparator : String = ".";
  62.            
  63.             var decimalSeparatorLocation : Number = FormattedNumberString.indexOf(DecimalSeparator);
  64.             var millionsPart : Number = parseInt(FormattedNumberString.substr(0, 3));
  65.             var thousandsPart : Number = parseInt(FormattedNumberString.substr(3, 3));
  66.             var hundredsPart : Number = parseInt(FormattedNumberString.substr(6, 3));
  67.             var decimalsPart : Number = parseInt(FormattedNumberString.substr(decimalSeparatorLocation + 1, 2));
  68.  
  69.             for (var NumberPart : Number = 1; NumberPart <= 4; NumberPart++)
  70.             {
  71.                 switch (NumberPart)
  72.                 {
  73.                     case 1:
  74.                         {
  75.                             ActualNumber = millionsPart;
  76.                             if (millionsPart == 1)
  77.                             {
  78.                                 Words += _oneMillionWord;
  79.                                 Words +=" ";
  80.                                 continue;
  81.                             }
  82.                             break;
  83.                         }
  84.                     case 2:
  85.                         {
  86.                             ActualNumber = thousandsPart;
  87.                             if (millionsPart != 1 && millionsPart != 0)
  88.                             {
  89.                                Words += _millionsWord;
  90.                                Words+=" ";
  91.                             }
  92.                            
  93.                            
  94.                             if (thousandsPart == 1)
  95.                             {
  96.                                 Words += _oneThousandWord;
  97.                                 Words+=" ";
  98.                                 continue;
  99.                             }
  100.                            
  101.                             break;
  102.                         }
  103.                     case 3:
  104.                         {
  105.                             ActualNumber = hundredsPart;
  106.                             if (thousandsPart != 1 && thousandsPart != 0)
  107.                             {
  108.                                 Words += _thousandWord;
  109.                                 Words+=" ";
  110.                             }
  111.                             break;
  112.                         }
  113.                     case 4:
  114.                         {
  115.                             ActualNumber = decimalsPart;
  116.                             if (decimalsPart != 0)
  117.                             {
  118.                                 if (millionsPart == 0 && thousandsPart == 0 && hundredsPart == 0)
  119.                                 {
  120.                                     Words += _zeroWithWord;
  121.                                     Words+=" ";
  122.                                 }
  123.                                 else
  124.                                 {
  125.                                     Words += _withWord;
  126.                                     Words+=" ";
  127.                                 }
  128.                             }
  129.                             break;
  130.                         }
  131.                 }
  132.                
  133.                 hundreds = Math.floor((ActualNumber / 100));
  134.                 tens =  Math.floor((ActualNumber - hundreds * 100) / 10);
  135.                 units =  Math.floor((ActualNumber - (hundreds * 100 + tens * 10)));
  136.                 if (ActualNumber == 0) continue;
  137.                
  138.                 if (ActualNumber == 100)
  139.                 {
  140.                     Words += _oneHundredWord;
  141.                     Words+=" ";
  142.                     continue;
  143.                 }
  144.                 else
  145.                 {
  146.                     if (ActualNumber == 101 && NumberPart != 3)
  147.                     {
  148.                          Words += _oneHundredWord;
  149.                         Words+=" ";
  150.                         continue;
  151.                     }
  152.                     else
  153.                     {
  154.                         if (ActualNumber> 100)
  155.                         {
  156.                             Words += _numbersInWords[hundreds + 26];
  157.                             Words+=" ";
  158.                         }
  159.                     }
  160.                 }
  161. //                if (tens <3 && tens != 0)
  162. //                {
  163. //                Words += _numbersInWords[tens * 10 + units - 1];
  164. //          Words+="  ";
  165. //                }
  166. //                else
  167. //                {
  168.                     if (tens> 1)
  169.                     {
  170.                             Words += _numbersInWords[tens + 17];
  171. //              Words += " ";
  172.                             if (units == 0)continue;
  173.                             //Words += _andWord;
  174.                             //Words +=" ";
  175.                             Words += _numbersInWords[units - 1];
  176. //              Words +=" " ;
  177.                     }
  178.                    
  179.                     else  if (tens == 1)
  180.                     {
  181.                             Words += _numbersInWords[tens + 8];
  182. //              Words += " ";
  183.                             if (units == 0)continue;
  184.                             //Words += _andWord;
  185.                             //Words +=" ";
  186.                             Words += _numbersInWords[units - 1];
  187. //              Words +=" " ;
  188.                     }                   
  189.                    
  190.                    
  191.                    
  192.                     else
  193.                     {
  194.                         if (thousandsPart> 1 && thousandsPart != 0){
  195.                            
  196.                             Words += NumeroCastellano.cardinal(units);
  197.                         }
  198.                         else if (tens == 0 && units != 0)
  199.                         {
  200.                             Words += _numbersInWords[Math.abs(units) - 1];
  201.                             Words+=" ";
  202.                         }
  203.  
  204.                     }
  205.                 }
  206.             if (decimalsPart != 0)Words += _centWord;
  207.            
  208.             Words = Words.replace("uno mil", "un mil");
  209.            
  210.             var sexStr : String = (feminino) ? "a":"o"
  211.             Words = StringManipulator.trim(Words);
  212.             Words = StringManipulator.removeCharsFromEnd(Words,1);
  213.             Words += sexStr;
  214.            
  215.             if(isNegative)Words = negative + " " + Words;
  216.            
  217.             return Words;
  218.         }
  219.  
  220.  
  221.        
  222.         /**
  223.          * Convierte un numero a textual cardinal.
  224.          *
  225.          * @param number el numero que vamos a convertir.
  226.          * @param feminino convertir a femnino. Default a falso.
  227.          *
  228.          */
  229.         public static function  cardinal( number : Number, feminino : Boolean = false) : String {
  230.  
  231.             if (number> 999999999) return "Numero demasiado grande";
  232.  
  233.             var _numbersInWords : Array =
  234.             [
  235.                 "un$", "dos", "tres", "cuatro", "cinco", "seis", "siete", "ocho", "nueve",
  236.                 "diez", "once", "doce", "trece", "catorce", "quince", "dieciseis", "diecisiete", "dieciocho", "diecinueve",
  237.                 "veinte", "veintiuno", "veintidos", "veintitres", "veinticuatro", "veinticinco", "veintiseis", "veintisiete", "veintiocho", "veintinueve",
  238.                 "treinta", "cuarenta", "cincuenta", "sesenta", "setenta", "ochenta", "noventa",
  239.                 "ciento", "doscientos", "trescientos", "cuatrocientos", "quinientos", "seiscientos", "setecientos", "ochocientos", "novecientos"   
  240.              ];
  241.             
  242.             var negative : String = "menos";
  243.             var isNegative : Boolean = (number<0);
  244.             number = Math.abs(number);
  245.            
  246.             var _centWord :String = "centavo(s)";
  247.          var _oneMillionWord :String = "un millon";
  248.             var _millionsWord :String = "millones";
  249.             var _oneThousandWord :String = "un mil";
  250.             var _thousandWord :String = "mil";
  251.             var _hundredWord :String = "cien";
  252.             var _oneHundredWord :String = "ciento un";
  253.             var _zeroWithWord :String = "cero con";
  254.             var _withWord :String = "con";
  255.             var _andWord :String = "y";
  256.             var hundreds : Number;
  257.             var tens : Number;
  258.             var units : Number;
  259.             var ActualNumber : Number = 0;
  260.             var Words : String = new String();
  261.             var FormattedNumberString : String = StringManipulator.zerofill(number, 9);
  262.              FormattedNumberString+=".00";
  263.             var DecimalSeparator : String = ".";
  264.             var decimalSeparatorLocation : Number = FormattedNumberString.indexOf(DecimalSeparator);
  265.             var millionsPart : Number = parseInt(FormattedNumberString.substr(0, 3));
  266.             var thousandsPart : Number = parseInt(FormattedNumberString.substr(3, 3));
  267.             var hundredsPart : Number = parseInt(FormattedNumberString.substr(6, 3));
  268.             var decimalsPart : Number = parseInt(FormattedNumberString.substr(decimalSeparatorLocation + 1, 2));
  269.  
  270.             for (var NumberPart : Number = 1; NumberPart <= 4; NumberPart++)
  271.             {
  272.                 switch (NumberPart)
  273.                 {
  274.                     case 1:
  275.                         {
  276.                             ActualNumber = millionsPart;
  277.                             if (millionsPart == 1)
  278.                             {
  279.                                 Words += _oneMillionWord;
  280.                                 Words +=" ";
  281.                                 continue;
  282.                             }
  283.                             break;
  284.                         }
  285.                     case 2:
  286.                         {
  287.                             ActualNumber = thousandsPart;
  288.                             if (millionsPart != 1 && millionsPart != 0)
  289.                             {
  290.                                Words += _millionsWord;
  291.                                Words+=" ";
  292.                             }
  293.                             if (thousandsPart == 1)
  294.                             {
  295.                                 Words += _oneThousandWord;
  296.                                 Words+=" ";
  297.                                 continue;
  298.                             }
  299.                             break;
  300.                         }
  301.                     case 3:
  302.                         {
  303.                             ActualNumber = hundredsPart;
  304.                             if (thousandsPart != 1 && thousandsPart != 0)
  305.                             {
  306.                                 Words += _thousandWord;
  307.                                 Words+=" ";
  308.                             }
  309.                             break;
  310.                         }
  311.                     case 4:
  312.                         {
  313.                             ActualNumber = decimalsPart;
  314.                             if (decimalsPart != 0)
  315.                             {
  316.                                 if (millionsPart == 0 && thousandsPart == 0 && hundredsPart == 0)
  317.                                 {
  318.                                     Words += _zeroWithWord;
  319.                                     Words+=" ";
  320.                                 }
  321.                                 else
  322.                                 {
  323.                                     Words += _withWord;
  324.                                     Words+=" ";
  325.                                 }
  326.                             }
  327.                             break;
  328.                         }
  329.                 }
  330.                
  331.                 hundreds = Math.floor((ActualNumber / 100));
  332.                 tens =  Math.floor((ActualNumber - hundreds * 100) / 10);
  333.                 units =  Math.floor((ActualNumber - (hundreds * 100 + tens * 10)));
  334.                 if (ActualNumber == 0) continue;
  335.                
  336.                 if (ActualNumber == 100)
  337.                 {
  338.                     Words += _hundredWord;
  339.                     Words+=" ";
  340.                     continue;
  341.                 }
  342.                 else
  343.                 {
  344.                     if (ActualNumber == 101 && NumberPart != 3)
  345.                     {
  346.                         Words += _oneHundredWord;
  347.                         Words+=" ";
  348.                         continue;
  349.                     }
  350.                     else
  351.                     {
  352.                         if (ActualNumber> 100)
  353.                         {
  354.                             Words += _numbersInWords[hundreds + 35];
  355.                             Words+=" ";
  356.                         }
  357.                     }
  358.                 }
  359.                 if (tens <3 && tens != 0)
  360.                 {
  361.                     Words += _numbersInWords[tens * 10 + units - 1];
  362.                     Words+="  ";
  363.                 }
  364.                 else
  365.                 {
  366.                     if (tens> 2)
  367.                     {
  368.                             Words += _numbersInWords[tens + 26];
  369.                             Words += " ";
  370.                             if (units == 0)continue;
  371.                             Words += _andWord;
  372.                             Words +=" ";
  373.                             Words += _numbersInWords[units - 1];
  374.                             Words +=" " ;
  375.                     }
  376.                     else
  377.                     {
  378.                         if (tens == 0 && units != 0)
  379.                         {
  380.                             Words += _numbersInWords[units - 1];
  381.                             Words+=" ";
  382.                         }
  383.                     }
  384.                 }
  385.             }
  386.             if (decimalsPart != 0)Words += _centWord;
  387.             Words = Words.replace("uno mil", "un mil");
  388.             var sexStr : String = (feminino) ? "a":"o"
  389.             Words = Words.replace("$", sexStr);
  390.             Words = StringManipulator.trim(Words);
  391.            
  392.             if(isNegative)Words = negative + " " + Words;
  393.            
  394.             return Words;
  395.         }
  396.     }
  397. }

NumeroCastellano.as

Comments are closed.

Image compression on this page is provided by WordPress Image Compressor