Comunidad de diseño web y desarrollo en internet online

conversión de dinero o importe a letras en javascript

Citar            
MensajeEscrito el 26 Nov 2004 06:57 pm
:) alo, yo sé que aquí debería haber flash. Sin embargo espero qeu esta función en javascript le sirva a alguien.

Convertir el importe a letras no fue tan simple así que ahí está

$542.25 regresa quinientos cuarenta y dos pesos 25/100

Saludos

<script language="JavaScript1.2">


Código :

/*
 
// Función modulo, regresa el residuo de una división 
function mod(dividendo , divisor) 
{ 
  resDiv = dividendo / divisor ;  
  parteEnt = Math.floor(resDiv);            // Obtiene la parte Entera de resDiv 
  parteFrac = resDiv - parteEnt ;      // Obtiene la parte Fraccionaria de la división
  modulo = Math.round(parteFrac * divisor);  // Regresa la parte fraccionaria * la división (modulo) 
  return modulo; 
} // Fin de función mod

// Función ObtenerParteEntDiv, regresa la parte entera de una división
function ObtenerParteEntDiv(dividendo , divisor) 
{ 
  resDiv = dividendo / divisor ;  
  parteEntDiv = Math.floor(resDiv); 
  return parteEntDiv; 
} // Fin de función ObtenerParteEntDiv

// function fraction_part, regresa la parte Fraccionaria de una cantidad
function fraction_part(dividendo , divisor) 
{ 
  resDiv = dividendo / divisor ;  
  f_part = Math.floor(resDiv); 
  return f_part; 
} // Fin de función fraction_part


// function string_literal conversion is the core of this program 
// converts numbers to spanish strings, handling the general special 
// cases in spanish language. 
function string_literal_conversion(number) 
{   
   // first, divide your number in hundreds, tens and units, cascadig 
   // trough subsequent divisions, using the modulus of each division 
   // for the next. 

   centenas = ObtenerParteEntDiv(number, 100); 
   
   number = mod(number, 100); 

   decenas = ObtenerParteEntDiv(number, 10); 
   number = mod(number, 10); 

   unidades = ObtenerParteEntDiv(number, 1); 
   number = mod(number, 1);  
   string_hundreds="";
   string_tens="";
   string_units="";
   // cascade trough hundreds. This will convert the hundreds part to 
   // their corresponding string in spanish.
   if(centenas == 1){
      string_hundreds = "ciento ";
   } 
   
   
   if(centenas == 2){
      string_hundreds = "doscientos ";
   }
    
   if(centenas == 3){
      string_hundreds = "trescientos ";
   } 
   
   if(centenas == 4){
      string_hundreds = "cuatrocientos ";
   } 
   
   if(centenas == 5){
      string_hundreds = "quinientos ";
   } 
   
   if(centenas == 6){
      string_hundreds = "seiscientos ";
   } 
   
   if(centenas == 7){
      string_hundreds = "setecientos ";
   } 
   
   if(centenas == 8){
      string_hundreds = "ochocientos ";
   } 
   
   if(centenas == 9){
      string_hundreds = "novecientos ";
   } 
   
 // end switch hundreds 

   // casgade trough tens. This will convert the tens part to corresponding 
   // strings in spanish. Note, however that the strings between 11 and 19 
   // are all special cases. Also 21-29 is a special case in spanish. 
   if(decenas == 1){
      //Special case, depends on units for each conversion
      if(unidades == 1){
         string_tens = "once";
      }
      
      if(unidades == 2){
         string_tens = "doce";
      }
      
      if(unidades == 3){
         string_tens = "trece";
      }
      
      if(unidades == 4){
         string_tens = "catorce";
      }
      
      if(unidades == 5){
         string_tens = "quince";
      }
      
      if(unidades == 6){
         string_tens = "dieciseis";
      }
      
      if(unidades == 7){
         string_tens = "diecisiete";
      }
      
      if(unidades == 8){
         string_tens = "dieciocho";
      }
      
      if(unidades == 9){
         string_tens = "diecinueve";
      }
   } 
   //alert("STRING_TENS ="+string_tens);
   
   if(decenas == 2){
      string_tens = "veinti";
   }
   if(decenas == 3){
      string_tens = "treinta";
   }
   if(decenas == 4){
      string_tens = "cuarenta";
   }
   if(decenas == 5){
      string_tens = "cincuenta";
   }
   if(decenas == 6){
      string_tens = "sesenta";
   }
   if(decenas == 7){
      string_tens = "setenta";
   }
   if(decenas == 8){
      string_tens = "ochenta";
   }
   if(decenas == 9){
      string_tens = "noventa";
   }
   
    // Fin de swicth decenas


   // cascades trough units, This will convert the units part to corresponding 
   // strings in spanish. Note however that a check is being made to see wether 
   // the special cases 11-19 were used. In that case, the whole conversion of 
   // individual units is ignored since it was already made in the tens cascade. 

   if (decenas == 1) 
   { 
      string_units="";  // empties the units check, since it has alredy been handled on the tens switch 
   } 
   else 
   { 
      if(unidades == 1){
         string_units = "un";
      }
      if(unidades == 2){
         string_units = "dos";
      }
      if(unidades == 3){
         string_units = "tres";
      }
      if(unidades == 4){
         string_units = "cuatro";
      }
      if(unidades == 5){
         string_units = "cinco";
      }
      if(unidades == 6){
         string_units = "seis";
      }
      if(unidades == 7){
         string_units = "siete";
      }
      if(unidades == 8){
         string_units = "ocho";
      }
      if(unidades == 9){
         string_units = "nueve";
      }
       // end switch units 
   } // end if-then-else 
   

//final special cases. This conditions will handle the special cases which 
//are not as general as the ones in the cascades. Basically four: 

// when you've got 100, you dont' say 'ciento' you say 'cien' 
// 'ciento' is used only for [101 >= number > 199] 
if (centenas == 1 && decenas == 0 && unidades == 0) 
{ 
   string_hundreds = "cien " ; 
}  

// when you've got 10, you don't say any of the 11-19 special 
// cases.. just say 'diez' 
if (decenas == 1 && unidades ==0) 
{ 
   string_tens = "diez " ; 
} 

// when you've got 20, you don't say 'veinti', which is used 
// only for [21 >= number > 29] 
if (decenas == 2 && unidades ==0) 
{ 
  string_tens = "veinte " ; 
} 

// for numbers >= 30, you don't use a single word such as veintiuno 
// (twenty one), you must add 'y' (and), and use two words. v.gr 31 
// 'treinta y uno' (thirty and one) 
if (decenas >=3 && unidades >=1) 
{ 
   string_tens = string_tens+" y "; 
} 

// this line gathers all the hundreds, tens and units into the final string 
// and returns it as the function value.
final_string = string_hundreds+string_tens+string_units;


return final_string ; 

} //end of function string_literal_conversion()================================ 

// handle some external special cases. Specially the millions, thousands 
// and hundreds descriptors. Since the same rules apply to all number triads 
// descriptions are handled outside the string conversion function, so it can 
// be re used for each triad. 


function covertirNumLetras(number)
{
   
  //number = number_format (number, 2);
   number1=number;
   //settype (number, "integer");
   cent = number1.split('.');   
   centavos = cent[1];
   
   if (centavos == 0 || centavos == undefined){
   centavos = "00";}

   if (number == 0 || number == "") 
   { // if amount = 0, then forget all about conversions, 
      centenas_final_string=" cero "; // amount is zero (cero). handle it externally, to 
      // function breakdown 
  } 
   else 
   { 
   
     millions  = ObtenerParteEntDiv(number, 1000000); // first, send the millions to the string 
      number = mod(number, 1000000);           // conversion function 
      
     if (millions != 0)
      {                      
      // This condition handles the plural case 
         if (millions == 1) 
         {              // if only 1, use 'millon' (million). if 
            descriptor= " millon ";  // > than 1, use 'millones' (millions) as 
            } 
         else 
         {                           // a descriptor for this triad. 
              descriptor = " millones "; 
            } 
      } 
      else 
      {    
         descriptor = " ";                 // if 0 million then use no descriptor. 
      } 
      millions_final_string = string_literal_conversion(millions)+descriptor; 
          
      
      thousands = ObtenerParteEntDiv(number, 1000);  // now, send the thousands to the string 
        number = mod(number, 1000);            // conversion function. 
      //print "Th:".thousands;
     if (thousands != 1) 
      {                   // This condition eliminates the descriptor 
         thousands_final_string =string_literal_conversion(thousands) + " mil "; 
       //  descriptor = " mil ";          // if there are no thousands on the amount 
      } 
      if (thousands == 1)
      {
         thousands_final_string = " mil "; 
     }
      if (thousands < 1) 
      { 
         thousands_final_string = " "; 
      } 
  
      // this will handle numbers between 1 and 999 which 
      // need no descriptor whatsoever. 

     centenas  = number;                     
      centenas_final_string = string_literal_conversion(centenas) ; 
      
   } //end if (number ==0) 

   /*if (ereg("un",centenas_final_string))
   {
     centenas_final_string = ereg_replace("","o",centenas_final_string); 
   }*/
   //finally, print the output. 

   /* Concatena los millones, miles y cientos*/
   cad = millions_final_string+thousands_final_string+centenas_final_string; 
   
   /* Convierte la cadena a Mayúsculas*/
   cad = cad.toUpperCase();       

   if (centavos.length>2)
   {   
      if(centavos.substring(2,3)>= 5){
         centavos = centavos.substring(0,1)+(parseInt(centavos.substring(1,2))+1).toString();
      }   else{
        centavos = centavos.substring(0,2);
       }
   }

   /* Concatena a los centavos la cadena "/100" */
   if (centavos.length==1)
   {
      centavos = centavos+"0";
   }
   centavos = centavos+ "/100"; 


   /* Asigna el tipo de moneda, para 1 = PESO, para distinto de 1 = PESOS*/
   if (number == 1)
   {
      moneda = " PESO ";  
   }
   else
   {
      moneda = " PESOS ";  
   }
   /* Regresa el número en cadena entre paréntesis y con tipo de moneda y la fase M.N.*/
   alert( "FINAL="+cad+moneda+centavos+" US Dollars )");
}


</script>


si ustedes consideran que este es un tema que no debe ir aquí, ya quedará en ustedes si lo dejan o no.

Saludos :oops: [/code]

Por ishtarlaure

28 de clabLevel



 

unknown
Citar            
MensajeEscrito el 26 Nov 2004 07:07 pm
Oye pues está chuli esto eh vaya currito, tus noches te habrá costado. En fin gracias. Supongo que pasarlo a flash no costará tanto para los specialist que tenemos aquí.

Por Sisco

BOFH

3700 de clabLevel

12 tutoriales
4 articulos

Genero:Masculino   Bastard Operators From Hell

Catalunya

unknown
Citar            
MensajeEscrito el 26 Nov 2004 09:00 pm
Particularmente creo que es un muy buen aporte.
¿Es de tu autoría?

Si es así, felicidades ;)

Por Pedro

BOFH

3017 de clabLevel

3 tutoriales
6 articulos

  Bastard Operators From Hell

Honduras

unknown
Citar            
MensajeEscrito el 27 Nov 2004 01:14 am
Llevo varias horas sin frenar de digitar a velocidades increibles como BOFH que soy y al fin las he traducido a Flash ... ahora escuchen la sabia tecnica empleada, ... resguarda milenariamente y ahora transmito a ustedes para usar estas funciones de JavaScript En Flash ... copien y peguenlas ¬_¬

Por Freddie

BOFH

53 tutoriales
597 articulos
43 ejemplos

Genero:Masculino   Admin

Conserje de Cristalab

unknown
Citar            
MensajeEscrito el 22 Dic 2004 07:37 pm
No fue exactamente todo mío... me lo pasaron, lo adapté a lo que necesitaba y lo traduje de php a javascript y coldfusion.

Pero fue muy tardado encontrar el código y como es algo común y he visto que en otros sitios cobran por el código ya hecho, mejor lo comparto.

si a alguien le interesa en javascript o coldfusion, se lo paso.

Saludos :)

Por ishtarlaure

28 de clabLevel



 

msie
Citar            
MensajeEscrito el 23 Nov 2007 09:54 pm

ishtarlaure escribió:

:) alo, yo sé que aquí debería haber flash. Sin embargo espero qeu esta función en javascript le sirva a alguien.

Convertir el importe a letras no fue tan simple así que ahí está

$542.25 regresa quinientos cuarenta y dos pesos 25/100

Saludos

<script language="JavaScript1.2">


Código :

/*
 
// Función modulo, regresa el residuo de una división 
function mod(dividendo , divisor) 
{ 
  resDiv = dividendo / divisor ;  
  parteEnt = Math.floor(resDiv);            // Obtiene la parte Entera de resDiv 
  parteFrac = resDiv - parteEnt ;      // Obtiene la parte Fraccionaria de la división
  modulo = Math.round(parteFrac * divisor);  // Regresa la parte fraccionaria * la división (modulo) 
  return modulo; 
} // Fin de función mod

// Función ObtenerParteEntDiv, regresa la parte entera de una división
function ObtenerParteEntDiv(dividendo , divisor) 
{ 
  resDiv = dividendo / divisor ;  
  parteEntDiv = Math.floor(resDiv); 
  return parteEntDiv; 
} // Fin de función ObtenerParteEntDiv

// function fraction_part, regresa la parte Fraccionaria de una cantidad
function fraction_part(dividendo , divisor) 
{ 
  resDiv = dividendo / divisor ;  
  f_part = Math.floor(resDiv); 
  return f_part; 
} // Fin de función fraction_part


// function string_literal conversion is the core of this program 
// converts numbers to spanish strings, handling the general special 
// cases in spanish language. 
function string_literal_conversion(number) 
{   
   // first, divide your number in hundreds, tens and units, cascadig 
   // trough subsequent divisions, using the modulus of each division 
   // for the next. 

   centenas = ObtenerParteEntDiv(number, 100); 
   
   number = mod(number, 100); 

   decenas = ObtenerParteEntDiv(number, 10); 
   number = mod(number, 10); 

   unidades = ObtenerParteEntDiv(number, 1); 
   number = mod(number, 1);  
   string_hundreds="";
   string_tens="";
   string_units="";
   // cascade trough hundreds. This will convert the hundreds part to 
   // their corresponding string in spanish.
   if(centenas == 1){
      string_hundreds = "ciento ";
   } 
   
   
   if(centenas == 2){
      string_hundreds = "doscientos ";
   }
    
   if(centenas == 3){
      string_hundreds = "trescientos ";
   } 
   
   if(centenas == 4){
      string_hundreds = "cuatrocientos ";
   } 
   
   if(centenas == 5){
      string_hundreds = "quinientos ";
   } 
   
   if(centenas == 6){
      string_hundreds = "seiscientos ";
   } 
   
   if(centenas == 7){
      string_hundreds = "setecientos ";
   } 
   
   if(centenas == 8){
      string_hundreds = "ochocientos ";
   } 
   
   if(centenas == 9){
      string_hundreds = "novecientos ";
   } 
   
 // end switch hundreds 

   // casgade trough tens. This will convert the tens part to corresponding 
   // strings in spanish. Note, however that the strings between 11 and 19 
   // are all special cases. Also 21-29 is a special case in spanish. 
   if(decenas == 1){
      //Special case, depends on units for each conversion
      if(unidades == 1){
         string_tens = "once";
      }
      
      if(unidades == 2){
         string_tens = "doce";
      }
      
      if(unidades == 3){
         string_tens = "trece";
      }
      
      if(unidades == 4){
         string_tens = "catorce";
      }
      
      if(unidades == 5){
         string_tens = "quince";
      }
      
      if(unidades == 6){
         string_tens = "dieciseis";
      }
      
      if(unidades == 7){
         string_tens = "diecisiete";
      }
      
      if(unidades == 8){
         string_tens = "dieciocho";
      }
      
      if(unidades == 9){
         string_tens = "diecinueve";
      }
   } 
   //alert("STRING_TENS ="+string_tens);
   
   if(decenas == 2){
      string_tens = "veinti";
   }
   if(decenas == 3){
      string_tens = "treinta";
   }
   if(decenas == 4){
      string_tens = "cuarenta";
   }
   if(decenas == 5){
      string_tens = "cincuenta";
   }
   if(decenas == 6){
      string_tens = "sesenta";
   }
   if(decenas == 7){
      string_tens = "setenta";
   }
   if(decenas == 8){
      string_tens = "ochenta";
   }
   if(decenas == 9){
      string_tens = "noventa";
   }
   
    // Fin de swicth decenas


   // cascades trough units, This will convert the units part to corresponding 
   // strings in spanish. Note however that a check is being made to see wether 
   // the special cases 11-19 were used. In that case, the whole conversion of 
   // individual units is ignored since it was already made in the tens cascade. 

   if (decenas == 1) 
   { 
      string_units="";  // empties the units check, since it has alredy been handled on the tens switch 
   } 
   else 
   { 
      if(unidades == 1){
         string_units = "un";
      }
      if(unidades == 2){
         string_units = "dos";
      }
      if(unidades == 3){
         string_units = "tres";
      }
      if(unidades == 4){
         string_units = "cuatro";
      }
      if(unidades == 5){
         string_units = "cinco";
      }
      if(unidades == 6){
         string_units = "seis";
      }
      if(unidades == 7){
         string_units = "siete";
      }
      if(unidades == 8){
         string_units = "ocho";
      }
      if(unidades == 9){
         string_units = "nueve";
      }
       // end switch units 
   } // end if-then-else 
   

//final special cases. This conditions will handle the special cases which 
//are not as general as the ones in the cascades. Basically four: 

// when you've got 100, you dont' say 'ciento' you say 'cien' 
// 'ciento' is used only for [101 >= number > 199] 
if (centenas == 1 && decenas == 0 && unidades == 0) 
{ 
   string_hundreds = "cien " ; 
}  

// when you've got 10, you don't say any of the 11-19 special 
// cases.. just say 'diez' 
if (decenas == 1 && unidades ==0) 
{ 
   string_tens = "diez " ; 
} 

// when you've got 20, you don't say 'veinti', which is used 
// only for [21 >= number > 29] 
if (decenas == 2 && unidades ==0) 
{ 
  string_tens = "veinte " ; 
} 

// for numbers >= 30, you don't use a single word such as veintiuno 
// (twenty one), you must add 'y' (and), and use two words. v.gr 31 
// 'treinta y uno' (thirty and one) 
if (decenas >=3 && unidades >=1) 
{ 
   string_tens = string_tens+" y "; 
} 

// this line gathers all the hundreds, tens and units into the final string 
// and returns it as the function value.
final_string = string_hundreds+string_tens+string_units;


return final_string ; 

} //end of function string_literal_conversion()================================ 

// handle some external special cases. Specially the millions, thousands 
// and hundreds descriptors. Since the same rules apply to all number triads 
// descriptions are handled outside the string conversion function, so it can 
// be re used for each triad. 


function covertirNumLetras(number)
{
   
  //number = number_format (number, 2);
   number1=number;
   //settype (number, "integer");
   cent = number1.split('.');   
   centavos = cent[1];
   
   if (centavos == 0 || centavos == undefined){
   centavos = "00";}

   if (number == 0 || number == "") 
   { // if amount = 0, then forget all about conversions, 
      centenas_final_string=" cero "; // amount is zero (cero). handle it externally, to 
      // function breakdown 
  } 
   else 
   { 
   
     millions  = ObtenerParteEntDiv(number, 1000000); // first, send the millions to the string 
      number = mod(number, 1000000);           // conversion function 
      
     if (millions != 0)
      {                      
      // This condition handles the plural case 
         if (millions == 1) 
         {              // if only 1, use 'millon' (million). if 
            descriptor= " millon ";  // > than 1, use 'millones' (millions) as 
            } 
         else 
         {                           // a descriptor for this triad. 
              descriptor = " millones "; 
            } 
      } 
      else 
      {    
         descriptor = " ";                 // if 0 million then use no descriptor. 
      } 
      millions_final_string = string_literal_conversion(millions)+descriptor; 
          
      
      thousands = ObtenerParteEntDiv(number, 1000);  // now, send the thousands to the string 
        number = mod(number, 1000);            // conversion function. 
      //print "Th:".thousands;
     if (thousands != 1) 
      {                   // This condition eliminates the descriptor 
         thousands_final_string =string_literal_conversion(thousands) + " mil "; 
       //  descriptor = " mil ";          // if there are no thousands on the amount 
      } 
      if (thousands == 1)
      {
         thousands_final_string = " mil "; 
     }
      if (thousands < 1) 
      { 
         thousands_final_string = " "; 
      } 
  
      // this will handle numbers between 1 and 999 which 
      // need no descriptor whatsoever. 

     centenas  = number;                     
      centenas_final_string = string_literal_conversion(centenas) ; 
      
   } //end if (number ==0) 

   /*if (ereg("un",centenas_final_string))
   {
     centenas_final_string = ereg_replace("","o",centenas_final_string); 
   }*/
   //finally, print the output. 

   /* Concatena los millones, miles y cientos*/
   cad = millions_final_string+thousands_final_string+centenas_final_string; 
   
   /* Convierte la cadena a Mayúsculas*/
   cad = cad.toUpperCase();       

   if (centavos.length>2)
   {   
      if(centavos.substring(2,3)>= 5){
         centavos = centavos.substring(0,1)+(parseInt(centavos.substring(1,2))+1).toString();
      }   else{
        centavos = centavos.substring(0,2);
       }
   }

   /* Concatena a los centavos la cadena "/100" */
   if (centavos.length==1)
   {
      centavos = centavos+"0";
   }
   centavos = centavos+ "/100"; 


   /* Asigna el tipo de moneda, para 1 = PESO, para distinto de 1 = PESOS*/
   if (number == 1)
   {
      moneda = " PESO ";  
   }
   else
   {
      moneda = " PESOS ";  
   }
   /* Regresa el número en cadena entre paréntesis y con tipo de moneda y la fase M.N.*/
   alert( "FINAL="+cad+moneda+centavos+" US Dollars )");
}


</script>


si ustedes consideran que este es un tema que no debe ir aquí, ya quedará en ustedes si lo dejan o no.

Saludos :oops: [/code]


saludos para este post.
esta muy bueno el codigo me gustaria si me lo pudieras pasar en php. o como lo puedo ver en funcionamiento por q ya lo pegue y no jala en el alert. agradezco la yuda

Por dkool

0 de clabLevel



 

msie7
Citar            
MensajeEscrito el 25 Ene 2008 01:12 am
Hola a todos, la funcion me fue de mucha utilidad, aunq quise hacer un trabajo previo para usarlo. Aqui esta el mismo codigo pero en C#. La forma de introducir el dato es como un string sin puntos ni espacios que separen las unidades de las decenas y las centenas, y uso la coma para separar los decimales. Ejem:

MixMoneda money = new MixMoneda();
string palabras = money.covertirNumLetras("20567,35"); // Esto es 20.567,35

En terminos generales la entrada es hasta el numero

Código :

string palabras = money.covertirNumLetras("999999999, 99"); // Osea 999.999.999,99

      // Función modulo, regresa el residuo de una división 
      public double mod(double dividendo, double divisor) 
      {   
         double resDiv = dividendo / divisor ;    
         double parteEnt = Math.Floor(resDiv); // Obtiene la parte Entera de resDiv   
         double parteFrac = resDiv - parteEnt; // Obtiene la parte Fraccionaria de la división  
         double modulo = Math.Round(parteFrac * divisor); // Regresa la parte fraccionaria * la división (modulo)   
         return modulo; 
      } // Fin de función mod 

      // Función ObtenerParteEntDiv, regresa la parte entera de una división 
      public double ObtenerParteEntDiv(double dividendo, double divisor) 
      {   
         double resDiv = dividendo / divisor ;    
         double parteEntDiv = Math.Floor(resDiv);   
         return parteEntDiv; 
      } // Fin de función ObtenerParteEntDiv 

      // function fraction_part, regresa la parte Fraccionaria de una cantidad 
      public double fraction_part(double dividendo, double divisor) 
      {   
         double resDiv = dividendo / divisor ;    
         double f_part = Math.Floor(resDiv);   
         return f_part; 
      } // Fin de función fraction_part 

      // function string_literal conversion is the core of this program 
      // converts numbers to spanish strings, handling the general special 
      // cases in spanish language. 
      public string string_literal_conversion(double number) 
      {      
         // first, divide your number in hundreds, tens and units, cascadig    
         // trough subsequent divisions, using the modulus of each division    
         // for the next.    
         double centenas = ObtenerParteEntDiv(number, 100);       
         number = mod(number, 100);    
         double decenas = ObtenerParteEntDiv(number, 10);    
         number = mod(number, 10);    
         double unidades = ObtenerParteEntDiv(number, 1);    
         number = mod(number, 1);     
         string string_hundreds="";   
         string string_tens="";   
         string string_units="";   
   
         // cascade trough hundreds. This will convert the hundreds part to    
         // their corresponding string in spanish.   
         if(centenas == 1)
         {      
            string_hundreds = "ciento ";   
         }
         if(centenas == 2)
         {      
            string_hundreds = "doscientos ";   
         }       
         if(centenas == 3)
         {      
            string_hundreds = "trescientos ";   
         }       
         if(centenas == 4)
         {      
            string_hundreds = "cuatrocientos ";   
         }       
         if(centenas == 5)
         {      
            string_hundreds = "quinientos ";   
         }       
         if(centenas == 6)
         {      
            string_hundreds = "seiscientos ";   
         }       
         if(centenas == 7)
         {      
            string_hundreds = "setecientos ";   
         }       
         if(centenas == 8 )
         {      
            string_hundreds = "ochocientos ";   
         }       
         if(centenas == 9)
         {      
            string_hundreds = "novecientos ";   
         } // end switch hundreds    
   
         // casgade trough tens. This will convert the tens part to corresponding    
         // strings in spanish. Note, however that the strings between 11 and 19    
         // are all special cases. Also 21-29 is a special case in spanish.    
         if(decenas == 1)
         {      
            //Special case, depends on units for each conversion      
            if(unidades == 1)
            {         
               string_tens = "once";      
            }            
            if(unidades == 2)
            {         
               string_tens = "doce";      
            }            
            if(unidades == 3)
            {         
               string_tens = "trece";      
            }            
            if(unidades == 4)
            {         
               string_tens = "catorce";      
            }            
            if(unidades == 5)
            {         
               string_tens = "quince";      
            }            
            if(unidades == 6)
            {         
               string_tens = "dieciseis";      
            }            
            if(unidades == 7)
            {         
               string_tens = "diecisiete";      
            }            
            if(unidades == 8 )
            {         
               string_tens = "dieciocho";      
            }            
            if(unidades == 9)
            {         
               string_tens = "diecinueve";      
            }   
         }    
         //alert("STRING_TENS ="+string_tens);      
   
         if(decenas == 2)
         {      
            string_tens = "veinti";   
         }   
         if(decenas == 3)
         {      
            string_tens = "treinta";   
         }   
         if(decenas == 4)
         {      
            string_tens = "cuarenta";   
         }   
         if(decenas == 5)
         {      
            string_tens = "cincuenta";   
         }   
         if(decenas == 6)
         {      
            string_tens = "sesenta";   
         }   
         if(decenas == 7)
         {      
            string_tens = "setenta";   
         }   
         if(decenas == 8 )
         {      
            string_tens = "ochenta";   
         }   
         if(decenas == 9)
         {      
            string_tens = "noventa";   
         }       
         // Fin de swicth decenas   
   
         // cascades trough units, This will convert the units part to corresponding    
         // strings in spanish. Note however that a check is being made to see wether    
         // the special cases 11-19 were used. In that case, the whole conversion of    
         // individual units is ignored since it was already made in the tens cascade.    
         if (decenas == 1)    
         {       
            string_units=""; // empties the units check, since it has alredy been handled on the tens switch    
         }
         else    
         {       
            if(unidades == 1)
            {         
               string_units = "un";      
            }      
            if(unidades == 2)
            {         
               string_units = "dos";      
            }      
            if(unidades == 3)
            {         
               string_units = "tres";      
            }      
            if(unidades == 4)
            {         
               string_units = "cuatro";      
            }      
            if(unidades == 5)
            {         
               string_units = "cinco";      
            }      
            if(unidades == 6)
            {         
               string_units = "seis";      
            }      
            if(unidades == 7)
            {         
               string_units = "siete";      
            }      
            if(unidades == 8 )
            {         
               string_units = "ocho";      
            }      
            if(unidades == 9)
            {         
               string_units = "nueve";      
            }       
            // end switch units    
         } // end if-then-else    
   
         //final special cases. This conditions will handle the special cases which 
         //are not as general as the ones in the cascades. Basically four: 
   
         // when you've got 100, you dont' say 'ciento' you say 'cien' 
         // 'ciento' is used only for [101 >= number > 199] 
         if (centenas == 1 && decenas == 0 && unidades == 0) 
         {    
            string_hundreds = "cien " ; 
         }  
   
         // when you've got 10, you don't say any of the 11-19 special 
         // cases.. just say 'diez' 
         if (decenas == 1 && unidades == 0) 
         {    
            string_tens = "diez " ; 
         } 
   
         // when you've got 20, you don't say 'veinti', which is used 
         // only for [21 >= number > 29] 
         if (decenas == 2 && unidades == 0) 
         {   
            string_tens = "veinte " ; 
         } 
   
         // for numbers >= 30, you don't use a single word such as veintiuno 
         // (twenty one), you must add 'y' (and), and use two words. v.gr 31 
         // 'treinta y uno' (thirty and one) 
         if (decenas >=3 && unidades >=1) 
         {    
            string_tens = string_tens+" y "; 
         } 
   
         // this line gathers all the hundreds, tens and units into the final string 
         // and returns it as the function value.
         string final_string = string_hundreds+string_tens+string_units;
         return final_string ; 
      } //end of function string_literal_conversion()================================ 

      // handle some external special cases. Specially the millions, thousands 
      // and hundreds descriptors. Since the same rules apply to all number triads 
      // descriptions are handled outside the string conversion function, so it can 
      // be re used for each triad. 
      // MixMoneda money = new MixMoneda();
      // string palabras = money.covertirNumLetras("999 999 999, 99");
      public string covertirNumLetras(string number)
      {
         //number = number_format (number, 2);
         string number1 = number;
         //settype (number, "integer");
         string [] cent = number1.Split(','); 
         string centavos = cent.Length > 1 ? cent[1] : "00";
         double dnumber = Convert.ToDouble(number);
         
         string centenas_final_string = "";
         string descriptor = "";
         string millions_final_string = "";
         string thousands_final_string = "";
         string moneda = "";

         if (dnumber == 0 || number == "") 
         { 
            // if amount = 0, then forget all about conversions, 
            centenas_final_string = " cero "; // amount is zero (cero). handle it externally, to 
            // function breakdown 
         }
         else 
         {          
            double millions = ObtenerParteEntDiv(dnumber, 1000000); // first, send the millions to the string 
            dnumber = mod(dnumber, 1000000); // conversion function 

            if (millions != 0)
            { 
               // This condition handles the plural case 
               if (millions == 1) 
               { 
                  // if only 1, use 'millon' (million). if 
                  descriptor= " millon "; // > than 1, use 'millones' (millions) as 
               }
               else 
               { 
                  // a descriptor for this triad. 
                  descriptor = " millones "; 
               }
            } 
            else 
            { 
               descriptor = " "; // if 0 million then use no descriptor. 
            }
            millions_final_string = string_literal_conversion(millions)+descriptor; 
         
            double thousands = ObtenerParteEntDiv(dnumber, 1000); // now, send the thousands to the string 
            dnumber = mod(dnumber, 1000); // conversion function. 
            
            //print "Th:".thousands;
            if (thousands != 1) 
            { 
               // This condition eliminates the descriptor 
               thousands_final_string = string_literal_conversion(thousands) + " mil "; 
               // descriptor = " mil "; // if there are no thousands on the amount 
            } 
            if (thousands == 1)
            {
               thousands_final_string = " mil "; 
            }
            if (thousands < 1) 
            { 
               thousands_final_string = " "; 
            } 

            // this will handle numbers between 1 and 999 which 
            // need no descriptor whatsoever. 

            double centenas = dnumber; 
            centenas_final_string = string_literal_conversion(centenas) ; 
         } //end if (number ==0) 

         //   if (ereg("un",centenas_final_string))
         //   {
         //      centenas_final_string = ereg_replace("","o",centenas_final_string); 
         //   }
         //finally, print the output. 

         // Concatena los millones, miles y cientos
         string cad = millions_final_string+thousands_final_string+centenas_final_string; 

         // Convierte la cadena a Mayúsculas
         cad = cad.ToUpper(); 
      

         if (centavos.Length > 2)
         {
            if(Convert.ToDouble(centavos.Substring(2,3)) >= 5)
            {
               centavos = centavos.Substring(0,1)+(int.Parse(centavos.Substring(1,2))+1).ToString();
            } 
            else
            {
               centavos = centavos.Substring(0,2);
            }
         }

         // Concatena a los centavos la cadena "/100" 
         if (centavos.Length==1)
         {
            centavos = centavos+"0";
         }
         centavos = centavos+ "/100"; 

         // Asigna el tipo de moneda, para 1 = DOLAR, para distinto de 1 = DOLARES
         if (dnumber == 1)
         {
            moneda = " DOLAR CON "; 
         }
         else
         {
            moneda = " DOLARES CON "; 
         }
   
         // Regresa el número en cadena entre paréntesis y con tipo de moneda y la fase M.N.
         return cad + moneda + centavos;
      }


:)

Por jeremy

0 de clabLevel



Genero:Masculino  

msie
Citar            
MensajeEscrito el 09 May 2008 04:39 pm
Hola q tal la vdd esta muy burno tu codigo de conversion, pero no le podido utilizar, es ke no c como? :oops: , lo quiero utilizar en javascript, Gracias... :D

Por Unknown33

0 de clabLevel



Genero:Masculino  

msie
Citar            
MensajeEscrito el 05 Sep 2008 12:45 am
Ahi va el ejemplo para nada más copiar y pegar en un html
espero sea de ayuda

saludos ^^


Código :

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>

<script language="javascript">
 
// Función modulo, regresa el residuo de una división 
function mod(dividendo , divisor) 
{ 
  resDiv = dividendo / divisor ;  
  parteEnt = Math.floor(resDiv);            // Obtiene la parte Entera de resDiv 
  parteFrac = resDiv - parteEnt ;      // Obtiene la parte Fraccionaria de la división
  modulo = Math.round(parteFrac * divisor);  // Regresa la parte fraccionaria * la división (modulo) 
  return modulo; 
} // Fin de función mod

// Función ObtenerParteEntDiv, regresa la parte entera de una división
function ObtenerParteEntDiv(dividendo , divisor) 
{ 
  resDiv = dividendo / divisor ;  
  parteEntDiv = Math.floor(resDiv); 
  return parteEntDiv; 
} // Fin de función ObtenerParteEntDiv

// function fraction_part, regresa la parte Fraccionaria de una cantidad
function fraction_part(dividendo , divisor) 
{ 
  resDiv = dividendo / divisor ;  
  f_part = Math.floor(resDiv); 
  return f_part; 
} // Fin de función fraction_part


// function string_literal conversion is the core of this program 
// converts numbers to spanish strings, handling the general special 
// cases in spanish language. 
function string_literal_conversion(number) 
{   
   // first, divide your number in hundreds, tens and units, cascadig 
   // trough subsequent divisions, using the modulus of each division 
   // for the next. 

   centenas = ObtenerParteEntDiv(number, 100); 
   
   number = mod(number, 100); 

   decenas = ObtenerParteEntDiv(number, 10); 
   number = mod(number, 10); 

   unidades = ObtenerParteEntDiv(number, 1); 
   number = mod(number, 1);  
   string_hundreds="";
   string_tens="";
   string_units="";
   // cascade trough hundreds. This will convert the hundreds part to 
   // their corresponding string in spanish.
   if(centenas == 1){
      string_hundreds = "ciento ";
   } 
   
   
   if(centenas == 2){
      string_hundreds = "doscientos ";
   }
    
   if(centenas == 3){
      string_hundreds = "trescientos ";
   } 
   
   if(centenas == 4){
      string_hundreds = "cuatrocientos ";
   } 
   
   if(centenas == 5){
      string_hundreds = "quinientos ";
   } 
   
   if(centenas == 6){
      string_hundreds = "seiscientos ";
   } 
   
   if(centenas == 7){
      string_hundreds = "setecientos ";
   } 
   
   if(centenas == 8){
      string_hundreds = "ochocientos ";
   } 
   
   if(centenas == 9){
      string_hundreds = "novecientos ";
   } 
   
 // end switch hundreds 

   // casgade trough tens. This will convert the tens part to corresponding 
   // strings in spanish. Note, however that the strings between 11 and 19 
   // are all special cases. Also 21-29 is a special case in spanish. 
   if(decenas == 1){
      //Special case, depends on units for each conversion
      if(unidades == 1){
         string_tens = "once";
      }
      
      if(unidades == 2){
         string_tens = "doce";
      }
      
      if(unidades == 3){
         string_tens = "trece";
      }
      
      if(unidades == 4){
         string_tens = "catorce";
      }
      
      if(unidades == 5){
         string_tens = "quince";
      }
      
      if(unidades == 6){
         string_tens = "dieciseis";
      }
      
      if(unidades == 7){
         string_tens = "diecisiete";
      }
      
      if(unidades == 8){
         string_tens = "dieciocho";
      }
      
      if(unidades == 9){
         string_tens = "diecinueve";
      }
   } 
   //alert("STRING_TENS ="+string_tens);
   
   if(decenas == 2){
      string_tens = "veinti";
   }
   if(decenas == 3){
      string_tens = "treinta";
   }
   if(decenas == 4){
      string_tens = "cuarenta";
   }
   if(decenas == 5){
      string_tens = "cincuenta";
   }
   if(decenas == 6){
      string_tens = "sesenta";
   }
   if(decenas == 7){
      string_tens = "setenta";
   }
   if(decenas == 8){
      string_tens = "ochenta";
   }
   if(decenas == 9){
      string_tens = "noventa";
   }
   
    // Fin de swicth decenas


   // cascades trough units, This will convert the units part to corresponding 
   // strings in spanish. Note however that a check is being made to see wether 
   // the special cases 11-19 were used. In that case, the whole conversion of 
   // individual units is ignored since it was already made in the tens cascade. 

   if (decenas == 1) 
   { 
      string_units="";  // empties the units check, since it has alredy been handled on the tens switch 
   } 
   else 
   { 
      if(unidades == 1){
         string_units = "un";
      }
      if(unidades == 2){
         string_units = "dos";
      }
      if(unidades == 3){
         string_units = "tres";
      }
      if(unidades == 4){
         string_units = "cuatro";
      }
      if(unidades == 5){
         string_units = "cinco";
      }
      if(unidades == 6){
         string_units = "seis";
      }
      if(unidades == 7){
         string_units = "siete";
      }
      if(unidades == 8){
         string_units = "ocho";
      }
      if(unidades == 9){
         string_units = "nueve";
      }
       // end switch units 
   } // end if-then-else 
   

//final special cases. This conditions will handle the special cases which 
//are not as general as the ones in the cascades. Basically four: 

// when you've got 100, you dont' say 'ciento' you say 'cien' 
// 'ciento' is used only for [101 >= number > 199] 
if (centenas == 1 && decenas == 0 && unidades == 0) 
{ 
   string_hundreds = "cien " ; 
}  

// when you've got 10, you don't say any of the 11-19 special 
// cases.. just say 'diez' 
if (decenas == 1 && unidades ==0) 
{ 
   string_tens = "diez " ; 
} 

// when you've got 20, you don't say 'veinti', which is used 
// only for [21 >= number > 29] 
if (decenas == 2 && unidades ==0) 
{ 
  string_tens = "veinte " ; 
} 

// for numbers >= 30, you don't use a single word such as veintiuno 
// (twenty one), you must add 'y' (and), and use two words. v.gr 31 
// 'treinta y uno' (thirty and one) 
if (decenas >=3 && unidades >=1) 
{ 
   string_tens = string_tens+" y "; 
} 

// this line gathers all the hundreds, tens and units into the final string 
// and returns it as the function value.
final_string = string_hundreds+string_tens+string_units;


return final_string ; 

} //end of function string_literal_conversion()================================ 

// handle some external special cases. Specially the millions, thousands 
// and hundreds descriptors. Since the same rules apply to all number triads 
// descriptions are handled outside the string conversion function, so it can 
// be re used for each triad. 


function covertirNumLetras(number)
{
   
  //number = number_format (number, 2);
   number1=number; 
   //settype (number, "integer");
   cent = number1.split(".");   
   centavos = cent[1];
   
   
   if (centavos == 0 || centavos == undefined){
   centavos = "00";}

   if (number == 0 || number == "") 
   { // if amount = 0, then forget all about conversions, 
      centenas_final_string=" cero "; // amount is zero (cero). handle it externally, to 
      // function breakdown 
  } 
   else 
   { 
   
     millions  = ObtenerParteEntDiv(number, 1000000); // first, send the millions to the string 
      number = mod(number, 1000000);           // conversion function 
      
     if (millions != 0)
      {                      
      // This condition handles the plural case 
         if (millions == 1) 
         {              // if only 1, use 'millon' (million). if 
            descriptor= " millon ";  // > than 1, use 'millones' (millions) as 
            } 
         else 
         {                           // a descriptor for this triad. 
              descriptor = " millones "; 
            } 
      } 
      else 
      {    
         descriptor = " ";                 // if 0 million then use no descriptor. 
      } 
      millions_final_string = string_literal_conversion(millions)+descriptor; 
          
      
      thousands = ObtenerParteEntDiv(number, 1000);  // now, send the thousands to the string 
        number = mod(number, 1000);            // conversion function. 
      //print "Th:".thousands;
     if (thousands != 1) 
      {                   // This condition eliminates the descriptor 
         thousands_final_string =string_literal_conversion(thousands) + " mil "; 
       //  descriptor = " mil ";          // if there are no thousands on the amount 
      } 
      if (thousands == 1)
      {
         thousands_final_string = " mil "; 
     }
      if (thousands < 1) 
      { 
         thousands_final_string = " "; 
      } 
  
      // this will handle numbers between 1 and 999 which 
      // need no descriptor whatsoever. 

     centenas  = number;                     
      centenas_final_string = string_literal_conversion(centenas) ; 
      
   } //end if (number ==0) 

   /*if (ereg("un",centenas_final_string))
   {
     centenas_final_string = ereg_replace("","o",centenas_final_string); 
   }*/
   //finally, print the output. 

   /* Concatena los millones, miles y cientos*/
   cad = millions_final_string+thousands_final_string+centenas_final_string; 
   
   /* Convierte la cadena a Mayúsculas*/
   cad = cad.toUpperCase();       

   if (centavos.length>2)
   {   
      if(centavos.substring(2,3)>= 5){
         centavos = centavos.substring(0,1)+(parseInt(centavos.substring(1,2))+1).toString();
      }   else{
        centavos = centavos.substring(0,2);
       }
   }

   /* Concatena a los centavos la cadena "/100" */
   if (centavos.length==1)
   {
      centavos = centavos+"0";
   }
   centavos = centavos+ "/100"; 


   /* Asigna el tipo de moneda, para 1 = PESO, para distinto de 1 = PESOS*/
   if (number == 1)
   {
      moneda = " PESO ";  
   }
   else
   {
      moneda = " PESOS ";  
   }
   /* Regresa el número en cadena entre paréntesis y con tipo de moneda y la fase M.N.*/
   alert( "FINAL="+cad+moneda+centavos+" 00/100 M.N. )");
}


</script>

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
</head>

<body>

<script> covertirNumLetras("3.20");</script>
</body>
</html>

Por ishtarlaure

28 de clabLevel



 

msie
Citar            
MensajeEscrito el 05 Sep 2008 01:24 am
Una disculpa de antemano por escribir un año después.
De pura casualidad lo encontré y no está de más poner el código.

Este archivo salió porque se necesitaba hacer una factura y se tiene que poner el total de la venta en número y letra.

Asi empieza: en el archivo CFM que generará el texto se pone:

Código :

<cf_factura_pdf_texto number=#numberFormat(total_convertir, '___.__')# moneda=1> (#texto_final#)


Donde factura_pdf_texto es otro archivo que recibe de parámetro el número en formato tal y el tipo de moneda es Pesos. (Esta variable se puede cambiar para que sea dólares o al gusto). Y texto_final es la variable que se imprime.

Código de factura_pdf_text.cfm

Código :

<Cfparam name="attributes.number" default=0>

<cfset number = val(attributes.number)>
<cfset number1 = val(attributes.number)>
<cfset cent = ListToArray(numberFormat(number1,'__.__'), '.')>
<cfset centavos = cent[2]>



<cfif centavos eq 0 or centavos eq "undefined">
   <cfset centavos = "00">
</cfif>


<cfif number eq 0 or number eq "">
   <cfset centenas_final_string =" cero ">
<cfelse>
   <cf_factura_ObtenerParteEntDiv dividendo=#number# divisor=1000000>
   <cfset millions = resultado>
   <!--- 
     millions  = ObtenerParteEntDiv(number, ); // first, send the millions to the string  --->
   <cf_factura_pdf_mod dividendo=#number# divisor=1000000>
   
   <cfset number = modulo>

   <!--- <cfset number = number MOD 1000000> --->
   
   <cfif millions neq 0>
      <cfif millions eq 1>
         <cfset descriptor = " millon ">      
      <cfelse>
         <cfset descriptor = " millones ">      
      </cfif>
   <cfelse>
      <cfset descriptor = " ">
   </cfif>
   
   <cf_factura_string_literal number=#millions#>
   
   <cfset millions_final_string = res>
   <cfset millions_final_string = millions_final_string & descriptor>
   
   <!--- <cfset millions_final_string = string_literal_conversion(millions)+descriptor> 
        
      millions_final_string = string_literal_conversion(millions)+descriptor; --->
   
   <cf_factura_ObtenerParteEntDiv2 dividendo=#number# divisor=1000>
   <cfset thousands = resultado>
   <!--- 
      thousands = ObtenerParteEntDiv(number, 1000);  // now, send the thousands to the string  --->
   <cf_factura_pdf_mod2 dividendo=#number# divisor=1000>
   <cfset number = modulo>
   
   <!--- <cfset number = number MOD 1000> --->
   <cfif thousands neq 1>
      <cf_factura_string_literal2 number=#thousands#>
      <cfset thousands_final_string = res>
      <cfset thousands_final_string = thousands_final_string  & " mil ">
   
   </cfif>
   <cfif thousands eq 1>
      <cfset thousands_final_string = " mil ">
   </cfif>
   <cfif thousands lt 1>
      <cfset thousands_final_string = "  ">
   </cfif>
   
   <cfset centenas = number>

   <cf_factura_string_literal3 number=#centenas#>
   <cfset centenas_final_string = res>
      
</cfif>
   <cfset cad = millions_final_string&thousands_final_string&centenas_final_string>
   
   <cfif len(centavos) gt 2>
      <cfif mid(centavos, 2, 3) gte 5>
         <cfset centavos = mid(centavos, 0, 1)+ ToString(val(mid(centavos, 1,2)+1))>
      <cfelse>
         <cfset centavos = mid(centavos, 0, 2)>
      </cfif>
   </cfif>
   
   <cfif len(centavos) eq 1>
      <cfset centavos = centavos &"0">
   </cfif>
   <cfset centavos = centavos &"/100">
   <cfif number eq 1>
      <cfset moneda = " US DOLLAR ">
   <cfelse>
      <cfset moneda = " US DOLLARS ">
   </cfif>
   
   
 <CFSET final = UCase(cad&moneda&centavos)> 
   

<cfset caller.texto_final= final>



Ahora bien, este usa otros componentes factura_ObtenerParteEntDiv, factura_string_literal y factura_pdf_mod.

factura_ObtenerParteEntDiv.cfm

Código :

<Cfparam name="attributes.dividendo" default=0>
<Cfparam name="attributes.divisor" default=0>

<cfset resDiv = val(attributes.dividendo)/val(attributes.divisor)>
<cfset parteEntDiv = Fix(resDiv)>

<cfset caller.resultado= parteEntDiv>


factura_string_literal .cfm

Código :

<Cfparam name="attributes.number" default=0>

   <cf_factura_ObtenerParteEntDiv dividendo=#attributes.number# divisor=100>
   <cfset centenas = resultado>   
   
   <cf_factura_pdf_mod dividendo=#attributes.number# divisor=100>   
   <cfset attributes.number = modulo>
      
   <cf_factura_ObtenerParteEntDiv2 dividendo=#attributes.number# divisor=10>
   <cfset decenas = resultado>
   
   <cf_factura_pdf_mod2 dividendo=#attributes.number# divisor=10>   
   <cfset attributes.number = modulo>
   
   
   <cf_factura_ObtenerParteEntDiv3 dividendo=#attributes.number# divisor=1>
   <cfset unidades = resultado>
   <cf_factura_pdf_mod3 dividendo=#attributes.number# divisor=1>   
   <cfset attributes.number = modulo>
      
   <cfset string_hundreds="">
   <cfset string_tens="">
   <cfset string_units="">
   
   
   <cfswitch expression = "#centenas#">
        <cfcase value = "1">
          <cfset string_hundreds = " ciento ">
        </cfcase>
      <cfcase value = "2">
          <cfset string_hundreds = " doscientos ">
        </cfcase>
          <cfcase value = "3">
          <cfset string_hundreds = " trescientos ">
        </cfcase>
      <cfcase value = "4">
          <cfset string_hundreds = " cuatrocientos ">
        </cfcase>
      <cfcase value = "5">
          <cfset string_hundreds = " quinientos ">
        </cfcase>
      <cfcase value = "6">
          <cfset string_hundreds = " seiscientos ">
        </cfcase>
      <cfcase value = "7">
          <cfset string_hundreds = " setecientos ">
        </cfcase>
      <cfcase value = "8">
          <cfset string_hundreds = " ochocientos ">
        </cfcase>
      <cfcase value = "9">
          <cfset string_hundreds = " novecientos ">
        </cfcase>
      
   </cfswitch> 
      
   <cfswitch expression = "#decenas#">
        <cfcase value = "1">
      
          <cfswitch expression = "#unidades#">
           <cfcase value = "1">
             <cfset string_tens = "once">
           </cfcase>
         <cfcase value = "2">
             <cfset string_tens = "doce">
           </cfcase>
             <cfcase value = "3">
             <cfset string_tens = "trece">
           </cfcase>
         <cfcase value = "4">
             <cfset string_tens = "catorce">
           </cfcase>
         <cfcase value = "5">
             <cfset string_tens = "quince">
           </cfcase>
         <cfcase value = "6">
             <cfset string_tens = "dieciseis">
           </cfcase>
         <cfcase value = "7">
             <cfset string_tens = "diecisiete">
           </cfcase>
         <cfcase value = "8">
             <cfset string_tens = "dieciocho">
           </cfcase>
         <cfcase value = "9">
             <cfset string_tens = "diecinueve">
           </cfcase>
      
   </cfswitch> 
   
         
        </cfcase>
      <cfcase value = "2">
          <cfset string_tens = "veinti">
        </cfcase>
          <cfcase value = "3">
          <cfset string_tens = "treinta">
        </cfcase>
      <cfcase value = "4">
          <cfset string_tens = "cuarenta">
        </cfcase>
      <cfcase value = "5">
          <cfset string_tens = "cincuenta">
        </cfcase>
      <cfcase value = "6">
          <cfset string_tens = "sesenta">
        </cfcase>
      <cfcase value = "7">
          <cfset string_tens = "setenta">
        </cfcase>
      <cfcase value = "8">
          <cfset string_tens = "ochenta">
        </cfcase>
      <cfcase value = "9">
          <cfset string_tens = "noventa">
        </cfcase>
      
          
   </cfswitch> 
   <cfif decenas eq 1>
      <cfset string_units="">
   <cfelse>
      <cfswitch expression = "#unidades#">
        <cfcase value = "1">
          <cfset string_units = "un">
        </cfcase>
      <cfcase value = "2">
          <cfset string_units = "dos">
        </cfcase>
          <cfcase value = "3">
          <cfset string_units = "tres">
        </cfcase>
      <cfcase value = "4">
          <cfset string_units = "cuatro">
        </cfcase>
      <cfcase value = "5">
          <cfset string_units = "cinco">
        </cfcase>
      <cfcase value = "6">
          <cfset string_units = "seis">
        </cfcase>
      <cfcase value = "7">
          <cfset string_units = "siete">
        </cfcase>
      <cfcase value = "8">
          <cfset string_units = "ocho">
        </cfcase>
      <cfcase value = "9">
          <cfset string_units = " nueve">
        </cfcase>
      
      </cfswitch> 
      
   </cfif>
   
   <cfif centenas eq 1 and decenas eq 0 and unidades eq 0>
      <cfset string_hundreds = "cien ">
   </cfif>
   <cfif decenas eq 1 and unidades eq 0>
      <cfset string_tens = "diez ">
   </cfif>
   <cfif decenas eq 2 and unidades eq 0>
      <cfset string_tens = "veinte "> 
   </cfif>
   <cfif decenas gte 3  and unidades gte 1>
      <cfset string_tens = string_tens &" y ">
   </cfif>

   
   <cfset final_string = string_hundreds&string_tens&string_units>
   


<cfset caller.res= final_string>



factura_pdf_mod.cfm

Código :

<Cfparam name="attributes.dividendo" default=0>
<Cfparam name="attributes.divisor" default=0>

<cfset resDiv = val(attributes.dividendo)/val(attributes.divisor)>

<cfset parteEnt = Fix(resDiv)>
<cfset parteFrac = resDiv - parteEnt>
<!---
<cfset resultado=Fix(parteFrac * attributes.divisor)> 
No hace la extracción del entero como debiera
--->
<cfset resu = ListToArray(parteFrac * attributes.divisor)>
<cfset resultado = resu[1]>
<cfset caller.modulo= resultado>


Se que está bastante complejo pero realmente es lo mism que el javascript solo que partido en varios

Por ishtarlaure

28 de clabLevel



 

msie
Citar            
MensajeEscrito el 05 Sep 2008 01:25 am
Sé que el último es puro coldfusion y este es un foro de flash, sin embargo como lo solicitaron, no está de más tener las versiones posibles. Aunque esta resultó más compleja que la de javascript. La de php de plano no la encuentro. Saludos y espero que le sirva este código a alguien :D

Por ishtarlaure

28 de clabLevel



 

msie
Citar            
MensajeEscrito el 30 Nov 2008 04:37 pm
muy bueno el script pero parece que no se dieron cuenta que tiene un error muy serio: si el decimal es igual o mayor que 0.5 devuelve un numero entero erroneo.

Por ejemplo 23.40 devuelve veintitres y 40 pero si el numero es 23.50 devuelve veinticuatro y 50 nadie se percató?

Por luisbal

2 de clabLevel



 

msie7
Citar            
MensajeEscrito el 18 Mar 2009 08:07 pm
hola a todos creo que estoy de acuerdo dejaron pasar un detalle cuando los centavos son mayores o igual a 51 redondea las unidades, pero le modifique una variable y ya funciona . saludos a todos espero y les sirva

Código :

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>

<script language="javascript">
 

 
// Función modulo, regresa el residuo de una división 
function mod(dividendo , divisor) 
{ 
  resDiv = dividendo / divisor ;  
  
  parteEnt = Math.floor(resDiv);            // Obtiene la parte Entera de resDiv 
  
  parteFrac = resDiv - parteEnt ;      // Obtiene la parte Fraccionaria de la división
  
  modulo = Math.round(parteFrac * divisor);  // Regresa la parte fraccionaria * la división (modulo) 
  return modulo; 
} // Fin de función mod

// Función ObtenerParteEntDiv, regresa la parte entera de una división
function ObtenerParteEntDiv(dividendo , divisor) 
{ 
  resDiv = dividendo / divisor ;  
  parteEntDiv = Math.floor(resDiv); 
  return parteEntDiv; 
} // Fin de función ObtenerParteEntDiv

// function fraction_part, regresa la parte Fraccionaria de una cantidad
function fraction_part(dividendo , divisor) 
{ 
  resDiv = dividendo / divisor ;  
  f_part = Math.floor(resDiv); 
  return f_part; 
} // Fin de función fraction_part


// function string_literal conversion is the core of this program 
// converts numbers to spanish strings, handling the general special 
// cases in spanish language. 
function string_literal_conversion(number) 
{   
   // first, divide your number in hundreds, tens and units, cascadig 
   // trough subsequent divisions, using the modulus of each division 
   // for the next. 

   centenas = ObtenerParteEntDiv(number, 100); 
   
   number = mod(number, 100); 

   decenas = ObtenerParteEntDiv(number, 10); 
   number = mod(number, 10); 

   unidades = ObtenerParteEntDiv(number, 1); 
   number = mod(number, 1);  
   string_hundreds="";
   string_tens="";
   string_units="";
   // cascade trough hundreds. This will convert the hundreds part to 
   // their corresponding string in spanish.
   if(centenas == 1){
      string_hundreds = "ciento ";
   } 
   
   
   if(centenas == 2){
      string_hundreds = "doscientos ";
   }
    
   if(centenas == 3){
      string_hundreds = "trescientos ";
   } 
   
   if(centenas == 4){
      string_hundreds = "cuatrocientos ";
   } 
   
   if(centenas == 5){
      string_hundreds = "quinientos ";
   } 
   
   if(centenas == 6){
      string_hundreds = "seiscientos ";
   } 
   
   if(centenas == 7){
      string_hundreds = "setecientos ";
   } 
   
   if(centenas == 8){
      string_hundreds = "ochocientos ";
   } 
   
   if(centenas == 9){
      string_hundreds = "novecientos ";
   } 
   
 // end switch hundreds 

   // casgade trough tens. This will convert the tens part to corresponding 
   // strings in spanish. Note, however that the strings between 11 and 19 
   // are all special cases. Also 21-29 is a special case in spanish. 
   if(decenas == 1){
      //Special case, depends on units for each conversion
      if(unidades == 1){
         string_tens = "once";
      }
      
      if(unidades == 2){
         string_tens = "doce";
      }
      
      if(unidades == 3){
         string_tens = "trece";
      }
      
      if(unidades == 4){
         string_tens = "catorce";
      }
      
      if(unidades == 5){
         string_tens = "quince";
      }
      
      if(unidades == 6){
         string_tens = "dieciseis";
      }
      
      if(unidades == 7){
         string_tens = "diecisiete";
      }
      
      if(unidades == 8){
         string_tens = "dieciocho";
      }
      
      if(unidades == 9){
         string_tens = "diecinueve";
      }
   } 
   //alert("STRING_TENS ="+string_tens);
   
   if(decenas == 2){
      string_tens = "veinti";
   }
   if(decenas == 3){
      string_tens = "treinta";
   }
   if(decenas == 4){
      string_tens = "cuarenta";
   }
   if(decenas == 5){
      string_tens = "cincuenta";
   }
   if(decenas == 6){
      string_tens = "sesenta";
   }
   if(decenas == 7){
      string_tens = "setenta";
   }
   if(decenas == 8){
      string_tens = "ochenta";
   }
   if(decenas == 9){
      string_tens = "noventa";
   }
   
    // Fin de swicth decenas


   // cascades trough units, This will convert the units part to corresponding 
   // strings in spanish. Note however that a check is being made to see wether 
   // the special cases 11-19 were used. In that case, the whole conversion of 
   // individual units is ignored since it was already made in the tens cascade. 

   if (decenas == 1) 
   { 
      string_units="";  // empties the units check, since it has alredy been handled on the tens switch 
   } 
   else 
   { 
      if(unidades == 1){
         string_units = "un";
      }
      if(unidades == 2){
         string_units = "dos";
      }
      if(unidades == 3){
         string_units = "tres";
      }
      if(unidades == 4){
         string_units = "cuatro";
      }
      if(unidades == 5){
         string_units = "cinco";
      }
      if(unidades == 6){
         string_units = "seis";
      }
      if(unidades == 7){
         string_units = "siete";
      }
      if(unidades == 8){
         string_units = "ocho";
      }
      if(unidades == 9){
         string_units = "nueve";
      }
       // end switch units 
   } // end if-then-else 
   

//final special cases. This conditions will handle the special cases which 
//are not as general as the ones in the cascades. Basically four: 

// when you've got 100, you dont' say 'ciento' you say 'cien' 
// 'ciento' is used only for [101 >= number > 199] 
if (centenas == 1 && decenas == 0 && unidades == 0) 
{ 
   string_hundreds = "cien " ; 
}  

// when you've got 10, you don't say any of the 11-19 special 
// cases.. just say 'diez' 
if (decenas == 1 && unidades ==0) 
{ 
   string_tens = "diez " ; 
} 

// when you've got 20, you don't say 'veinti', which is used 
// only for [21 >= number > 29] 
if (decenas == 2 && unidades ==0) 
{ 
  string_tens = "veinte " ; 
} 

// for numbers >= 30, you don't use a single word such as veintiuno 
// (twenty one), you must add 'y' (and), and use two words. v.gr 31 
// 'treinta y uno' (thirty and one) 
if (decenas >=3 && unidades >=1) 
{ 
   string_tens = string_tens+" y "; 
} 

// this line gathers all the hundreds, tens and units into the final string 
// and returns it as the function value.
final_string = string_hundreds+string_tens+string_units;


return final_string ; 

} //end of function string_literal_conversion()================================ 

// handle some external special cases. Specially the millions, thousands 
// and hundreds descriptors. Since the same rules apply to all number triads 
// descriptions are handled outside the string conversion function, so it can 
// be re used for each triad. 


function covertirNumLetras(number)
{
   
  //number = number_format (number, 2);
   number1=number;
   //settype (number, "integer");
   cent = number1.split('.');   
   centavos = cent[1];
   numerparchado=cent[0];
   if (centavos == 0 || centavos == undefined){
   centavos = "00";}

   if (number == 0 || number == "") 
   { // if amount = 0, then forget all about conversions, 
      centenas_final_string=" cero "; // amount is zero (cero). handle it externally, to 
      // function breakdown 
  } 
   else 
   { 
   
     millions  = ObtenerParteEntDiv(number, 1000000); // first, send the millions to the string 
      number = mod(numerparchado, 1000000);           // conversion function 
      
     if (millions != 0)
      {                      
      // This condition handles the plural case 
         if (millions == 1) 
         {              // if only 1, use 'millon' (million). if 
            descriptor= " millon ";  // > than 1, use 'millones' (millions) as 
            } 
         else 
         {                           // a descriptor for this triad. 
              descriptor = " millones "; 
            } 
      } 
      else 
      {    
         descriptor = " ";                 // if 0 million then use no descriptor. 
      } 
      millions_final_string = string_literal_conversion(millions)+descriptor; 
          
      
      thousands = ObtenerParteEntDiv(number, 1000);  // now, send the thousands to the string 
        number = mod(number, 1000);            // conversion function. 
      //print "Th:".thousands;
     if (thousands != 1) 
      {                   // This condition eliminates the descriptor 
         thousands_final_string =string_literal_conversion(thousands) + " mil "; 
       //  descriptor = " mil ";          // if there are no thousands on the amount 
      } 
      if (thousands == 1)
      {
         thousands_final_string = " mil "; 
     }
      if (thousands < 1) 
      { 
         thousands_final_string = " "; 
      } 
  
      // this will handle numbers between 1 and 999 which 
      // need no descriptor whatsoever. 

     centenas  = number;                     
      centenas_final_string = string_literal_conversion(centenas) ; 
      
   } //end if (number ==0) 

   /*if (ereg("un",centenas_final_string))
   {
     centenas_final_string = ereg_replace("","o",centenas_final_string); 
   }*/
   //finally, print the output. 

   /* Concatena los millones, miles y cientos*/
   cad = millions_final_string+thousands_final_string+centenas_final_string; 
   
   /* Convierte la cadena a Mayúsculas*/
   cad = cad.toUpperCase();       

   if (centavos.length>2)
   {   
      if(centavos.substring(2,3)>= 5){
         centavos = centavos.substring(0,1)+(parseInt(centavos.substring(1,2))+1).toString();
      }   else{
        centavos = centavos.substring(0,2);
       }
   }

   /* Concatena a los centavos la cadena "/100" */
   if (centavos.length==1)
   {
      centavos = centavos+"0";
   }
   centavos = centavos+ "/100"; 


   /* Asigna el tipo de moneda, para 1 = PESO, para distinto de 1 = PESOS*/
   if (number == 1)
   {
      moneda = " PESO ";  
   }
   else
   {
      moneda = " PESOS ";  
   }
   /* Regresa el número en cadena entre paréntesis y con tipo de moneda y la fase M.N.*/
   alert( cad+moneda+centavos+" Pesos MX ");
}


</script>

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
</head>

<body>

<script> covertirNumLetras("482007852.99");</script>
</body>
</html>

Por teloxzak

0 de clabLevel



 

firefox
Citar            
MensajeEscrito el 21 Dic 2009 10:32 pm
Gente les dejo esta funcion para PHP

Código PHP :



// Función $modulo, regresa el residuo de una división 
function mod($dividendo , $divisor) 
{ 
  $resDiv = $dividendo / $divisor ;  
  
  $parteEnt = floor($resDiv);            // Obtiene la parte Entera de $resDiv 
  
  $parteFrac = $resDiv - $parteEnt ;      // Obtiene la parte Fraccionaria de la división
  
  $modulo = round($parteFrac * $divisor);  // Regresa la parte fraccionaria * la división ($modulo) 
  return $modulo; 
} // Fin de función mod





// Función ObtenerParteEntDiv, regresa la parte entera de una división
function ObtenerParteEntDiv($dividendo , $divisor) 
{ 
  $resDiv = $dividendo / $divisor ;  
  $parteEntDiv = floor($resDiv); 
  return $parteEntDiv; 
} // Fin de función ObtenerParteEntDiv





// function fraction_part, regresa la parte Fraccionaria de una cantidad
function fraction_part($dividendo , $divisor) 
{ 
  $resDiv = $dividendo / $divisor ;  
  $f_part = floor($resDiv); 
  return $f_part; 
} // Fin de función fraction_part


// function string_literal conversion is the core of this program 
// converts $numbers to spanish strings, handling the general special 
// cases in spanish language. 
function string_literal_conversion($number) 
{   
   // first, divide your $number in hundreds, tens and units, cascadig 
   // trough subsequent divisions, using the modulus of each division 
   // for the next. 

   $centenas = ObtenerParteEntDiv($number, 100); 
   
   $number = $number % 100; 

   $decenas = ObtenerParteEntDiv($number, 10); 
   $number = $number%10; 

   $unidades = ObtenerParteEntDiv($number, 1); 
   $number = $number % 1;  
   $string_hundreds="";
   $string_tens="";
   $string_units="";

   // cascade trough hundreds. This will convert the hundreds part to 
   // their corresponding string in spanish.
   if($centenas == 1) $string_hundreds = "ciento ";
   if($centenas == 2) $string_hundreds = "doscientos ";
   if($centenas == 3) $string_hundreds = "trescientos ";
   if($centenas == 4) $string_hundreds = "cuatrocientos ";
   if($centenas == 5) $string_hundreds = "quinientos ";
   if($centenas == 6) $string_hundreds = "seiscientos ";
   if($centenas == 7) $string_hundreds = "setecientos ";
   if($centenas == 8) $string_hundreds = "ochocientos ";
   if($centenas == 9) $string_hundreds = "novecientos ";

   
 // end switch hundreds 

   // casgade trough tens. This will convert the tens part to corresponding 
   // strings in spanish. Note, however that the strings between 11 and 19 
   // are all special cases. Also 21-29 is a special case in spanish. 
   if($decenas == 1){
      //Special case, depends on units for each conversion
      if($unidades == 1){
         $string_tens = "once";
      }
      
      if($unidades == 2){
         $string_tens = "doce";
      }
      
      if($unidades == 3){
         $string_tens = "trece";
      }
      
      if($unidades == 4){
         $string_tens = "catorce";
      }
      
      if($unidades == 5){
         $string_tens = "quince";
      }
      
      if($unidades == 6){
         $string_tens = "dieciseis";
      }
      
      if($unidades == 7){
         $string_tens = "diecisiete";
      }
      
      if($unidades == 8){
         $string_tens = "dieciocho";
      }
      
      if($unidades == 9){
         $string_tens = "diecinueve";
      }
   } 
   //alert("$string_tens ="+$string_tens);
   
   if($decenas == 2){
      $string_tens = "veinti";
   }
   if($decenas == 3){
      $string_tens = "treinta";
   }
   if($decenas == 4){
      $string_tens = "cuarenta";
   }
   if($decenas == 5){
      $string_tens = "cincuenta";
   }
   if($decenas == 6){
      $string_tens = "sesenta";
   }
   if($decenas == 7){
      $string_tens = "setenta";
   }
   if($decenas == 8){
      $string_tens = "ochenta";
   }
   if($decenas == 9){
      $string_tens = "noventa";
   }
   
    // Fin de swicth $decenas


   // cascades trough units, This will convert the units part to corresponding 
   // strings in spanish. Note however that a check is being made to see wether 
   // the special cases 11-19 were used. In that case, the whole conversion of 
   // individual units is ignored since it was already made in the tens cascade. 

   if ($decenas == 1) 
   { 
      $string_units="";  // empties the units check, since it has alredy been handled on the tens switch 
   } 
   else 
   { 
      if($unidades == 1){
         $string_units = "un";
      }
      if($unidades == 2){
         $string_units = "dos";
      }
      if($unidades == 3){
         $string_units = "tres";
      }
      if($unidades == 4){
         $string_units = "cuatro";
      }
      if($unidades == 5){
         $string_units = "cinco";
      }
      if($unidades == 6){
         $string_units = "seis";
      }
      if($unidades == 7){
         $string_units = "siete";
      }
      if($unidades == 8){
         $string_units = "ocho";
      }
      if($unidades == 9){
         $string_units = "nueve";
      }
       // end switch units 
   } // end if-then-else 
   

//final special cases. This conditions will handle the special cases which 
//are not as general as the ones in the cascades. Basically four: 

// when you've got 100, you dont' say 'ciento' you say 'cien' 
// 'ciento' is used only for [101 >= $number > 199] 
if ($centenas == 1 && $decenas == 0 && $unidades == 0) 
{ 
   $string_hundreds = "cien " ; 
}  

// when you've got 10, you don't say any of the 11-19 special 
// cases.. just say 'diez' 
if ($decenas == 1 && $unidades ==0) 
{ 
   $string_tens = "diez " ; 
} 

// when you've got 20, you don't say 'veinti', which is used 
// only for [21 >= $number > 29] 
if ($decenas == 2 && $unidades ==0) 
{ 
  $string_tens = "veinte " ; 
} 

// for $numbers >= 30, you don't use a single word such as veintiuno 
// (twenty one), you must add 'y' (and), and use two words. v.gr 31 
// 'treinta y uno' (thirty and one) 
if ($decenas >=3 && $unidades >=1) 
{ 
   $string_tens = $string_tens." y "; 
} 

// this line gathers all the hundreds, tens and units into the final string 
// and returns it as the function value.
$final_string = $string_hundreds.$string_tens.$string_units;


return $final_string ; 

} //end of function string_literal_conversion()================================ 

// handle some external special cases. Specially the $millions, $thousands 
// and hundreds $descriptors. Since the same rules apply to all $number triads 
// descriptions are handled outside the string conversion function, so it can 
// be re used for each triad. 


function convertir_numeros_a_letras($number)
{
   
  //$number = $number_format ($number, 2);
   $number1=$number;
   //settype ($number, "integer");
   $cent = explode ('.',$number1);   
   $centavos = $cent[1];
   $numerparchado=$cent[0];
   if ($centavos == 0 || $centavos == undefined){ $centavos = "00";}

   if ($number == 0 || $number == "") 
   { // if amount = 0, then forget all about conversions, 
      $centenas_final_string=" cero "; // amount is zero (cero). handle it externally, to 
      // function breakdown 
  } 
   else 
   { 
   
     $millions  = ObtenerParteEntDiv($number, 1000000); // first, send the $millions to the string 
      $number = mod($numerparchado, 1000000);           // conversion function 
      
     if ($millions != 0)
      {                      
      // This condition handles the plural case 
         if ($millions == 1) 
         {              // if only 1, use 'millon' (million). if 
            $descriptor= " millon ";  // > than 1, use 'millones' ($millions) as 
            } 
         else 
         {                           // a $descriptor for this triad. 
              $descriptor = " millones "; 
            } 
      } 
      else 
      {    
         $descriptor = " ";                 // if 0 million then use no $descriptor. 
      } 
      
     $millions_final_string = string_literal_conversion($millions).$descriptor; 
          
      
      $thousands = ObtenerParteEntDiv($number, 1000);  // now, send the $thousands to the string 
        $number = $number % 1000 ;            // conversion function. 
      //print "Th:".$thousands;
      
      
     if ($thousands != 1) 
      {                   // This condition eliminates the $descriptor 
         $thousands_final_string =string_literal_conversion($thousands) . " mil "; 
       //  $descriptor = " mil ";          // if there are no $thousands on the amount 
      } 
      if ($thousands == 1)
      {
         $thousands_final_string = " mil "; 
     }
      if ($thousands < 1) 
      { 
         $thousands_final_string = " "; 
      } 
  
      // this will handle $numbers between 1 and 999 which 
      // need no $descriptor whatsoever. 

      $centenas  = $number;                     
      $centenas_final_string = string_literal_conversion($centenas) ; 
      
   } //end if ($number ==0) 


   //finally, print the output. 

   /* Concatena los millones, miles y cientos*/
   $cad = $millions_final_string.$thousands_final_string.$centenas_final_string; 
   
   /* Convierte la cadena a Mayúsculas*/
   $cad = strtoupper($cad);       

   if (strlen($centavos)>2)
   {   
      if(substr($centavos,2,3)>= 5){
         $centavos = substr($centavos,0,1).(intval(substr($centavos,1,2))+1);
      }   else{
        $centavos = substr($centavos,0,2);
       }
   }

   /* Concatena a los $centavos la cadena "/100" */
   if (strlen($centavos)==1)
   {
      $centavos = $centavos."0";
   }
   $centavos = $centavos. "/100"; 


   /* Asigna el tipo de $moneda, para 1 = PESO, para distinto de 1 = PESOS*/
   if ($number == 1)
   {
      $moneda = " PESO ";  
   }
   else
   {
      $moneda = " PESOS ";  
   }
   /* Regresa el número en cadena entre paréntesis y con tipo de $moneda y la fase M.N.*/
   return( $cad.$moneda.$centavos." Pesos MX ");
}



Por vousys

1 de clabLevel



 

opera
Citar            
MensajeEscrito el 27 May 2011 08:36 pm
En donde puedo colocar mi variable de total, para convertirla a letras....

Te agradeceria que me respondieras....

Por victsand88

0 de clabLevel



Genero:Masculino  

PHP

firefox
Citar            
MensajeEscrito el 30 May 2011 05:21 pm
Solo pones total = convertir_numeros_a_letras(variable_de_numero); y listo :)
Ej: total = convertir_numeros_a_letras(547.50); alert(total);

saludos cordiales

Por ishtarlaure

28 de clabLevel



 

chrome
Citar            
MensajeEscrito el 31 May 2011 11:47 pm
Saludos... Amigo.

me quede atrasado con flash 8 (me sirve?) y te pido me ayudes.

Perdon. pero tu codigo lo pongo en un frame, boton, (donde) y debemos de tener dos variables (uno que es la variable del valor en numero) y el texto donde pone el resultado.(valor en letras) cual son las variables? :oops:

Por cm2kl

1 de clabLevel



 

msie8
Citar            
MensajeEscrito el 06 Jun 2011 05:21 pm
Buen día

Modifiqué el código para FLASH ya que las versiones anteriores mostraban Javascript, Coldfusion y Php.

En el primer frame pones el siguiente código

Código ActionScript :


// Función modulo, regresa el residuo de una división 
function mod(dividendo:Number , divisor:Number):Number
{ 
  var resDiv:Number = dividendo / divisor ;  
  
  var parteEnt:Number = Math.floor(resDiv);            // Obtiene la parte Entera de resDiv 
  
  var parteFrac:Number = resDiv - parteEnt ;      // Obtiene la parte Fraccionaria de la división
  
  var modulo:Number = Math.round(parteFrac * divisor);  // Regresa la parte fraccionaria * la división (modulo) 
  return modulo; 
} // Fin de función mod


// Función ObtenerParteEntDiv, regresa la parte entera de una división
function ObtenerParteEntDiv(dividendo:Number , divisor:Number):Number 
{ 
  var resDiv:Number = dividendo / divisor ;  
  var parteEntDiv:Number = Math.floor(resDiv); 
  return parteEntDiv; 
} // Fin de función ObtenerParteEntDiv


// function fraction_part, regresa la parte Fraccionaria de una cantidad
function fraction_part(dividendo:Number , divisor:Number):Number 
{ 
  var resDiv:Number = dividendo / divisor ;  
  var f_part:Number = Math.floor(resDiv); 
  return f_part; 
} // Fin de función fraction_part


// function string_literal conversion is the core of this program 
// converts numbers to spanish strings, handling the general special 
// cases in spanish language. 
function string_literal_conversion(number:Number):String
{   
   // first, divide your number in hundreds, tens and units, cascadig 
   // trough subsequent divisions, using the modulus of each division 
   // for the next. 

   var centenas:Number = ObtenerParteEntDiv(number, 100); 
   
   number = mod(number, 100); 

   var decenas:Number = ObtenerParteEntDiv(number, 10); 
   number = mod(number, 10); 

   var unidades:Number = ObtenerParteEntDiv(number, 1); 
   number = mod(number, 1);  
   var string_hundreds:String="";
   var string_tens:String="";
   var string_units:String = "";
   
   // cascade trough hundreds. This will convert the hundreds part to 
   // their corresponding string in spanish.
   if(centenas == 1){
      string_hundreds = "ciento ";
   } 
   
   if(centenas == 2){
      string_hundreds = "doscientos ";
   }
    
   if(centenas == 3){
      string_hundreds = "trescientos ";
   } 
   
   if(centenas == 4){
      string_hundreds = "cuatrocientos ";
   } 
   
   if(centenas == 5){
      string_hundreds = "quinientos ";
   } 
   
   if(centenas == 6){
      string_hundreds = "seiscientos ";
   } 
   
   if(centenas == 7){
      string_hundreds = "setecientos ";
   } 
   
   if(centenas == 8){
      string_hundreds = "ochocientos ";
   } 
   
   if(centenas == 9){
      string_hundreds = "novecientos ";
   } 
   
 // end switch hundreds 

   // casgade trough tens. This will convert the tens part to corresponding 
   // strings in spanish. Note, however that the strings between 11 and 19 
   // are all special cases. Also 21-29 is a special case in spanish. 
   if(decenas == 1){
      //Special case, depends on units for each conversion
      if(unidades == 1){
         string_tens = "once";
      }
      
      if(unidades == 2){
         string_tens = "doce";
      }
      
      if(unidades == 3){
         string_tens = "trece";
      }
      
      if(unidades == 4){
         string_tens = "catorce";
      }
      
      if(unidades == 5){
         string_tens = "quince";
      }
      
      if(unidades == 6){
         string_tens = "dieciseis";
      }
      
      if(unidades == 7){
         string_tens = "diecisiete";
      }
      
      if(unidades == 8){
         string_tens = "dieciocho";
      }
      
      if(unidades == 9){
         string_tens = "diecinueve";
      }
   } 
   //alert("STRING_TENS ="+string_tens);
   
   if(decenas == 2){
      string_tens = "veinti";
   }
   if(decenas == 3){
      string_tens = "treinta";
   }
   if(decenas == 4){
      string_tens = "cuarenta";
   }
   if(decenas == 5){
      string_tens = "cincuenta";
   }
   if(decenas == 6){
      string_tens = "sesenta";
   }
   if(decenas == 7){
      string_tens = "setenta";
   }
   if(decenas == 8){
      string_tens = "ochenta";
   }
   if(decenas == 9){
      string_tens = "noventa";
   }
   
    // Fin de swicth decenas


   // cascades trough units, This will convert the units part to corresponding 
   // strings in spanish. Note however that a check is being made to see wether 
   // the special cases 11-19 were used. In that case, the whole conversion of 
   // individual units is ignored since it was already made in the tens cascade. 

   if (decenas == 1) 
   { 
      string_units="";  // empties the units check, since it has alredy been handled on the tens switch 
   } 
   else 
   { 
      if(unidades == 1){
         string_units = "un";
      }
      if(unidades == 2){
         string_units = "dos";
      }
      if(unidades == 3){
         string_units = "tres";
      }
      if(unidades == 4){
         string_units = "cuatro";
      }
      if(unidades == 5){
         string_units = "cinco";
      }
      if(unidades == 6){
         string_units = "seis";
      }
      if(unidades == 7){
         string_units = "siete";
      }
      if(unidades == 8){
         string_units = "ocho";
      }
      if(unidades == 9){
         string_units = "nueve";
      }
       // end switch units 
   } // end if-then-else 
   

   //final special cases. This conditions will handle the special cases which 
   //are not as general as the ones in the cascades. Basically four: 

   // when you've got 100, you dont' say 'ciento' you say 'cien' 
   // 'ciento' is used only for [101 >= number > 199] 
   if (centenas == 1 && decenas == 0 && unidades == 0) 
   { 
      string_hundreds = "cien " ; 
   }  

   // when you've got 10, you don't say any of the 11-19 special 
   // cases.. just say 'diez' 
   if (decenas == 1 && unidades ==0) 
   { 
      string_tens = "diez " ; 
   } 

   // when you've got 20, you don't say 'veinti', which is used 
   // only for [21 >= number > 29] 
   if (decenas == 2 && unidades ==0) 
   { 
     string_tens = "veinte " ; 
   } 

   // for numbers >= 30, you don't use a single word such as veintiuno 
   // (twenty one), you must add 'y' (and), and use two words. v.gr 31 
   // 'treinta y uno' (thirty and one) 
   if (decenas >=3 && unidades >=1) 
   { 
      string_tens = string_tens+" y "; 
   } 

   // this line gathers all the hundreds, tens and units into the final string 
   // and returns it as the function value.
   var final_string:String = string_hundreds+string_tens+string_units;


   return final_string ; 

} //end of function string_literal_conversion()================================ 

// handle some external special cases. Specially the millions, thousands 
// and hundreds descriptors. Since the same rules apply to all number triads 
// descriptions are handled outside the string conversion function, so it can 
// be re used for each triad. 


function covertirNumLetras(number:Number):String
{
   
  //number = number_format (number, 2);
   var number1:Number = number;
   //settype (number, "integer");
   var cent:Array = String(number1).split('.');   
   var centavos:String = cent[1];
   var numerparchado:String = cent[0];
   var centenas_final_string:String;
   
   if (centavos == "0" || centavos == null){
      centavos = "00";
   }

   if (number == 0 ) 
   { // if amount = 0, then forget all about conversions, 
      centenas_final_string=" cero "; // amount is zero (cero). handle it externally, to 
      // function breakdown 
  } 
   else 
   { 
   
    var millions:Number  = ObtenerParteEntDiv(number, 1000000); // first, send the millions to the string 
    number = mod(Number(numerparchado), 1000000);           // conversion function 
   var descriptor:String;
      
     if (millions != 0)
      {                      
      // This condition handles the plural case 
         if (millions == 1) 
         {              // if only 1, use 'millon' (million). if 
            descriptor= " millon ";  // > than 1, use 'millones' (millions) as 
            } 
         else 
         {                           // a descriptor for this triad. 
              descriptor = " millones "; 
            } 
      } 
      else 
      {    
         descriptor = " ";                 // if 0 million then use no descriptor. 
      } 
      var millions_final_string:String = string_literal_conversion(millions)+descriptor; 
          
      
      var thousands:Number = ObtenerParteEntDiv(number, 1000);  // now, send the thousands to the string 
      number = mod(number, 1000);            // conversion function. 
      //print "Th:".thousands;
     var thousands_final_string:String;
    
     if (thousands != 1) 
      {                   // This condition eliminates the descriptor 
         thousands_final_string =string_literal_conversion(thousands) + " mil "; 
       //  descriptor = " mil ";          // if there are no thousands on the amount 
      } 
      if (thousands == 1)
      {
         thousands_final_string = " mil "; 
     }
      if (thousands < 1) 
      { 
         thousands_final_string = " "; 
      } 
  
      // this will handle numbers between 1 and 999 which 
      // need no descriptor whatsoever. 

     var centenas:Number  = number;                     
     centenas_final_string = string_literal_conversion(centenas) ; 
      
   } //end if (number ==0) 

   /*if (ereg("un",centenas_final_string))
   {
     centenas_final_string = ereg_replace("","o",centenas_final_string); 
   }*/
   //finally, print the output. 

   /* Concatena los millones, miles y cientos*/
   var cad:String = millions_final_string + thousands_final_string+centenas_final_string; 
   
   /* Convierte la cadena a Mayúsculas*/
   cad = cad.toUpperCase();       

   if (centavos.length>2)
   {   
      if(Number(centavos.substring(2,3)) >= 5){
         centavos = centavos.substring(0,1)+(parseInt(centavos.substring(1,2))+1).toString();
      }   else{
        centavos = centavos.substring(0,2);
       }
   }

   /* Concatena a los centavos la cadena "/100" */
   if (centavos.length==1)
   {
      centavos = centavos+"0";
   }
   centavos = centavos + "/100"; 
   
   var moneda:String;


   /* Asigna el tipo de moneda, para 1 = PESO, para distinto de 1 = PESOS*/
   if (number == 1)
   {
      moneda = " PESO ";  
   }
   else
   {
      moneda = " PESOS ";  
   }
   /* Regresa el número en cadena entre paréntesis y con tipo de moneda y la fase M.N.*/
   return  String( cad + moneda+centavos + " Pesos MX ");
}




y ya nada más llamas la función con:

Código ActionScript :

//Forma de aplicación
trace(covertirNumLetras(1524.50));



y te regresa :

Código ActionScript :

MIL QUINIENTOS VEINTICUATRO PESOS 50/100 Pesos MX 


Saludos cordiales ^^

Por ishtarlaure

28 de clabLevel



 

chrome
Citar            
MensajeEscrito el 08 Jun 2011 12:52 am
Amigo....... YA ME FUNCIONA. Gracias.... Gracias..... que el universo siempre te de lo que das.......

Por cm2kl

1 de clabLevel



 

msie8
Citar            
MensajeEscrito el 27 Jul 2011 08:44 am
Hola.

Excelente trabajo con tu función. pero he detectado unos detalles. trabaje un rato sobre su código para agregar unas validaciones en las manejo de las reglas de conversion.

te mando el codigo para tu revisión.

saludos.

-------------------------------------------



// Función modulo, regresa el residuo de una división
function mod(dividendo , divisor)
{


modulo = dividendo % divisor;

// resDiv = dividendo / divisor ;
// parteEnt = Math.floor(resDiv); // Obtiene la parte Entera de resDiv
// parteFrac = resDiv - parteEnt ; // Obtiene la parte Fraccionaria de la división
// modulo = Math.round(parteFrac * divisor); // Regresa la parte fraccionaria * la división (modulo)




return modulo;
} // Fin de función mod






// Función ObtenerParteEntDiv, regresa la parte entera de una división
function ObtenerParteEntDiv(dividendo , divisor)
{
resDiv = dividendo / divisor ;
parteEntDiv = Math.floor(resDiv);
return parteEntDiv;
} // Fin de función ObtenerParteEntDiv





// function fraction_part, regresa la parte Fraccionaria de una cantidad
function fraction_part(dividendo , divisor)
{
resDiv = dividendo / divisor ;
f_part = Math.floor(resDiv);
return f_part;
} // Fin de función fraction_part




// function string_literal conversion is the core of this program
// converts numbers to spanish strings, handling the general special
// cases in spanish language.
function string_literal_conversion(number)
{
// first, divide your number in hundreds, tens and units, cascadig
// trough subsequent divisions, using the modulus of each division
// for the next.

centenas = ObtenerParteEntDiv(number, 100);

number = mod(number, 100);

decenas = ObtenerParteEntDiv(number, 10);
number = mod(number, 10);

unidades = ObtenerParteEntDiv(number, 1);
number = mod(number, 1);
string_hundreds="";
string_tens="";
string_units="";
// cascade trough hundreds. This will convert the hundreds part to
// their corresponding string in spanish.
if(centenas == 1){
string_hundreds = "ciento ";
}


if(centenas == 2){
string_hundreds = "doscientos ";
}

if(centenas == 3){
string_hundreds = "trescientos ";
}

if(centenas == 4){
string_hundreds = "cuatrocientos ";
}

if(centenas == 5){
string_hundreds = "quinientos ";
}

if(centenas == 6){
string_hundreds = "seiscientos ";
}

if(centenas == 7){
string_hundreds = "setecientos ";
}

if(centenas == 8){
string_hundreds = "ochocientos ";
}

if(centenas == 9){
string_hundreds = "novecientos ";
}

// end switch hundreds

// casgade trough tens. This will convert the tens part to corresponding
// strings in spanish. Note, however that the strings between 11 and 19
// are all special cases. Also 21-29 is a special case in spanish.
if(decenas == 1){
//Special case, depends on units for each conversion
if(unidades == 1){
string_tens = "once";
}

if(unidades == 2){
string_tens = "doce";
}

if(unidades == 3){
string_tens = "trece";
}

if(unidades == 4){
string_tens = "catorce";
}

if(unidades == 5){
string_tens = "quince";
}

if(unidades == 6){
string_tens = "dieciseis";
}

if(unidades == 7){
string_tens = "diecisiete";
}

if(unidades == 8){
string_tens = "dieciocho";
}

if(unidades == 9){
string_tens = "diecinueve";
}
}
//alert("STRING_TENS ="+string_tens);

if(decenas == 2){
string_tens = "veinti";
}
if(decenas == 3){
string_tens = "treinta";
}
if(decenas == 4){
string_tens = "cuarenta";
}
if(decenas == 5){
string_tens = "cincuenta";
}
if(decenas == 6){
string_tens = "sesenta";
}
if(decenas == 7){
string_tens = "setenta";
}
if(decenas == 8){
string_tens = "ochenta";
}
if(decenas == 9){
string_tens = "noventa";
}

// Fin de swicth decenas


// cascades trough units, This will convert the units part to corresponding
// strings in spanish. Note however that a check is being made to see wether
// the special cases 11-19 were used. In that case, the whole conversion of
// individual units is ignored since it was already made in the tens cascade.

if (decenas == 1)
{
string_units=""; // empties the units check, since it has alredy been handled on the tens switch
}
else
{
if(unidades == 1){
string_units = "un";
}
if(unidades == 2){
string_units = "dos";
}
if(unidades == 3){
string_units = "tres";
}
if(unidades == 4){
string_units = "cuatro";
}
if(unidades == 5){
string_units = "cinco";
}
if(unidades == 6){
string_units = "seis";
}
if(unidades == 7){
string_units = "siete";
}
if(unidades == 8){
string_units = "ocho";
}
if(unidades == 9){
string_units = "nueve";
}
// end switch units
} // end if-then-else


//final special cases. This conditions will handle the special cases which
//are not as general as the ones in the cascades. Basically four:

// when you've got 100, you dont' say 'ciento' you say 'cien'
// 'ciento' is used only for [101 >= number > 199]
if (centenas == 1 && decenas == 0 && unidades == 0)
{
string_hundreds = "cien " ;
}

// when you've got 10, you don't say any of the 11-19 special
// cases.. just say 'diez'
if (decenas == 1 && unidades ==0)
{
string_tens = "diez " ;
}

// when you've got 20, you don't say 'veinti', which is used
// only for [21 >= number > 29]
if (decenas == 2 && unidades ==0)
{
string_tens = "veinte " ;
}

// for numbers >= 30, you don't use a single word such as veintiuno
// (twenty one), you must add 'y' (and), and use two words. v.gr 31
// 'treinta y uno' (thirty and one)
if (decenas >=3 && unidades >=1)
{
string_tens = string_tens+" y ";
}

// this line gathers all the hundreds, tens and units into the final string
// and returns it as the function value.
final_string = string_hundreds+string_tens+string_units;


return final_string ;

} //end of function string_literal_conversion()================================






// handle some external special cases. Specially the millions, thousands
// and hundreds descriptors. Since the same rules apply to all number triads
// descriptions are handled outside the string conversion function, so it can
// be re used for each triad.


function covertirNumLetras(number)
{

cad=" ";
moneda=" ";
centavos=" ";
millions=0;
millions_final_string=" ";
thousands_final_string=" ";
centenas_final_string=" ";
number1=number;
number1= number1+"";
cent = number1.split(".");
centavos = cent[1];

if (number < 1000000000)
{

if (centavos == 0 || centavos == undefined) { centavos = "00";}

number = number * 1 ;

if (number == 0 || number == "")
{
centenas_final_string=" cero "; // amount is zero (cero). handle it externally, to
}
else
{
if ((cent[0] == 0 || cent[0] == "") && (number > 0))
{ // if amount = 0, then forget all about conversions,
centenas_final_string=" cero "; // amount is zero (cero). handle it externally, to
}
else
{
millions = ObtenerParteEntDiv(number, 1000000); // first, send the millions to the string
number = mod(number, 1000000); // conversion function

if (millions != 0)
{
// This condition handles the plural case
if (millions == 1)
{ // if only 1, use 'millon' (million). if
descriptor= " millon "; // > than 1, use 'millones' (millions) as
}
else
{ // a descriptor for this triad.
descriptor = " millones ";
}
}
else
{
descriptor = " "; // if 0 million then use no descriptor.
}
millions_final_string = string_literal_conversion(millions)+descriptor;

thousands = ObtenerParteEntDiv(number, 1000); // now, send the thousands to the string
number = mod(number, 1000); // conversion function.
//print "Th:".thousands;
if (thousands != 1)
{ // This condition eliminates the descriptor
thousands_final_string =string_literal_conversion(thousands) + " mil ";
// descriptor = " mil "; // if there are no thousands on the amount
}
if (thousands == 1)
{
thousands_final_string = " mil ";
}
if (thousands < 1)
{
thousands_final_string = " ";
}

centenas = number;

centenas_final_string = string_literal_conversion(centenas) ;

} //end if (number ==0)
}

cad = millions_final_string+thousands_final_string+centenas_final_string;

cad = cad.toUpperCase();

if (centavos.length>2)
{
if(centavos.substring(2,3)>= 5){
centavos = centavos.substring(0,1)+(parseInt(centavos.substring(1,2))+1).toString();
} else{
centavos = centavos.substring(0,2);
}
}

if (centavos.length==1)
{
centavos = centavos+"0";
}
centavos = centavos+ "/100";


if ((number >= 1.00) && (number <= 1.99))
{

moneda = " PESO ";

}
else
{
if ((millions != 0) && (thousands == 0) && (centenas == 0))
{
moneda = " DE PESOS ";
}
else
{
moneda = " PESOS ";
}

}

return cad+moneda+centavos+" M.N.";

}
else
{
cad = "Cantidades superiores a MIL DE MILLONES no son soportadas por esta funcion.";
moneda = " ";
centavos = " ";

return cad+moneda+centavos;


}

}
-------------------------------------------------------------

que tengas una excelente tarde.

Saludos.

Por OLA12345

0 de clabLevel



 

msie7
Citar            
MensajeEscrito el 30 Dic 2011 08:22 pm
COMO SE PUEDE MODIFICAR EL CODIGO PARA QUE PUEDA CONVERTIR 999,999,999 POR QUE SOLO LLEGA HASTA 99,999,999

Por mpineiro

1 de clabLevel



 

chrome
Citar            
MensajeEscrito el 30 Dic 2011 08:30 pm
POR QUE CUANDO SE PONE LA CANTIDAD DE 999999999.99 ESCRIBE UN MIL DE MAS

Por mpineiro

1 de clabLevel



 

chrome

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.