Club Builder - Foros de discusión Club Builder
Foro de C++Builder en español
 
 FAQFAQ   BuscarBuscar   MiembrosMiembros   Grupos de UsuariosGrupos de Usuarios   RegistrarseRegistrarse 
 PerfilPerfil   Entra para ver tus mensajes privadosEntra para ver tus mensajes privados   EntrarEntrar 

Escribir un número en letra

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Consultas
Ver tema anterior :: Ver tema siguiente  
Autor Mensaje
Mensaje    Asunto: Escribir un número en letra Responder citando

He estado buscando por el foro y tal vez no haya sabido hacerlo. Juraría que en algún sitio vi una rutina para escribir las cifras en letra, es decir que si yo tengo él número 1200, el programa escriba MIL DOSCIENTOS.
_________________
Un saludo

Necesitamos tu ayuda: Envía AI al 27595 (Coste 1,20 euros + IVA)
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Re: Escribir un número en letra Responder citando

Angel escribió:
He estado buscando por el foro y tal vez no haya sabido hacerlo. Juraría que en algún sitio vi una rutina para escribir las cifras en letra, es decir que si yo tengo él número 1200, el programa escriba MIL DOSCIENTOS.


Hay que buscar mas, que después nos quejamos
https://cppbuilder.es/viewtopic.php?t=7420

Saludos, Bosoft.
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Re: Escribir un número en letra Responder citando

Gracias
bosoft escribió:
Hay que buscar mas, que después nos quejamos
https://cppbuilder.es/viewtopic.php?t=7420

Saludos, Bosoft.

Tienes toda la razón y hay que buscar más y mejor Embarassed
_________________
Un saludo

Necesitamos tu ayuda: Envía AI al 27595 (Coste 1,20 euros + IVA)
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Responder citando

hay que buscar mas si, pero este post me ofrece al oportunidad de no tenerlo que buscar yo en el futuro, ¡¡¡¡pa la saca!!!!
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

Hola, hace tiempo hice esta funcion para pasar de numeros a letras,
evalua hasta Quintillones y decimales, se le pasa un double y devuelve
una cadena ansi.

Se ha tratado que el resultado se aproxime lo mas posible a la conversion humana.

Para los miles de millones usamos la expresion Millardo, los de Billones Billardo y asi...

Esta funcion se la hice al tio Bill, el resto de los mortales no manejamos tanto dinero Wink

Código:
AnsiString TfUtil::aLetras(double Numero)
{
//      Los numeros los leemos en bloques de a tres y siempre se
//      leen igual, segun la posicion del bloque le añadimos o
//      no Subfijos como Mil, Millon(es).........etc.
//

//_________Formateamos a conveniencia

String NumberFormat=",##0.00;-,##0.00";

String Cadena=FormatFloat(NumberFormat,Numero);

//__________Eliminar puntos si los hubiera
for(int i=1;i<=Cadena.Length();i++)
 if(Cadena.SubString(i,1)==".")
  Cadena.Delete(i,1);

//__________Separar Bloques
String Decimal;   // para separar decimales
int ComaPos=0;    // para guardar posicion de la coma
bool Coma;
for(int i=1;i<Cadena>0)
 Bloques+=1;
AnsiString aEvaluar, Resultado;

int Cuenta=0;
for(int j=1;j<=ComaPos;j++)
{


  if(Cuenta==3)
  {
   Resultado+=EvaluarBloque(aEvaluar);
   String Tmp=EvaluarBloque(aEvaluar);
   switch (Bloques)
   {
    case 2 : if(Tmp!="")
             {
              if(Tmp.SubString(Tmp.Length()-2,3)=="Uno")
               Resultado.Delete(Resultado.Length(),1);
              Resultado+=" Mil ";
             }
             break;

    case 3 :   if(Tmp!="")
             {
               if(EvaluarBloque(aEvaluar)=="Un")
                Resultado+=" Millon ";
               else
                Resultado+=" Millones ";
             }
             break;

    case 4 :  if(Tmp!="")
             {
               if(EvaluarBloque(aEvaluar)=="Un")
                Resultado+=" Millardo ";
               else
                Resultado+=" Millardos ";
             }
               break;

    case 5 :  if(Tmp!="")
             {
               if(EvaluarBloque(aEvaluar)=="Un")
                Resultado+=" Billon ";
               else
                Resultado+=" Billones ";
               break;
             }
    case 6 :  if(Tmp!="")
             {
               if(EvaluarBloque(aEvaluar)=="Un")
                Resultado+=" Billardo ";
               else
                Resultado+=" Billardos ";
             }
             break;

    case 7 :  if(Tmp!="")
             {
               if(EvaluarBloque(aEvaluar)=="Un")
                Resultado+=" Trillon ";
               else
                Resultado+=" Trillones ";
             }
             break;
    case 8 :  if(Tmp!="")
             {
               if(EvaluarBloque(aEvaluar)=="Un")
                Resultado+=" Trillardo ";
               else
                Resultado+=" Trillardos ";
             }
             break;
    case 9 :  if(Tmp!="")
             {
               if(EvaluarBloque(aEvaluar)=="Un")
                Resultado+=" Cuatrillon ";
               else
                Resultado+=" Cuatrillones ";
             }
             break;
    case 10 :if(Tmp!="")
             {
                if(EvaluarBloque(aEvaluar)=="Un")
                 Resultado+=" Cuatrillardo ";
                else
                 Resultado+=" Cuatrillardos ";
             }
             break;

    case 11 : if(Tmp!="")
             {
                 if(EvaluarBloque(aEvaluar)=="Un")
                  Resultado+=" Quintillon ";
                 else
                  Resultado+=" Quintillones ";
             }
             break;
   }
   Bloques--;
   Cuenta=0;
   aEvaluar="";
  }

  aEvaluar+=Cadena.SubString(j,1);
  Cuenta++;
}
if(EvaluarBloque(Decimal)=="")
 Decimal="0";
else
 Decimal=EvaluarBloque(Decimal);
return LowerCase(Resultado+" Con "+Decimal+"/100");//EvaluarBloque(Cadena);

}
//----------------------------------------------------------------------------
AnsiString TfUtil::EvaluarBloque(AnsiString Bloque)
{
//Evaluacion de bloque de tres digitos
AnsiString Resultado;
//___seccion centenas________//

if(Bloque.SubString(1,1)=="1")
 Resultado+="Cien";
if(Bloque.SubString(1,1)=="2")
 Resultado+="Doscientos ";
if(Bloque.SubString(1,1)=="3")
 Resultado+="Trescientos ";
if(Bloque.SubString(1,1)=="4")
 Resultado+="Cuatrocientos ";
if(Bloque.SubString(1,1)=="5")
 Resultado+="Quinientos ";
if(Bloque.SubString(1,1)=="6")
 Resultado+="Seiscientos ";
if(Bloque.SubString(1,1)=="7")
 Resultado+="Setecientos ";
if(Bloque.SubString(1,1)=="8")
 Resultado+="Ochocientos ";
if(Bloque.SubString(1,1)=="9")
 Resultado+="Novecientos ";
if(Resultado=="Cien") //anomalia de la centena unica
 if(Bloque.SubString(2,2)=="00")
  Resultado+=" ";
 else
  Resultado+="to ";

//___seccion decenas unidades________//
if(Bloque.SubString(2,1)=="1")//anomalia de la unidad de decena
{
 if(Bloque.SubString(2,2)=="10")
  Resultado+="Diez";
 if(Bloque.SubString(2,2)=="11")
  Resultado+="Once";
 if(Bloque.SubString(2,2)=="12")
  Resultado+="Doce";
 if(Bloque.SubString(2,2)=="13")
  Resultado+="Trece";
 if(Bloque.SubString(2,2)=="14")
  Resultado+="Catorce";
 if(Bloque.SubString(2,2)=="15")
  Resultado+="Quince";
 if(Bloque.SubString(2,2)=="16")
  Resultado+="Dieciseis";
 if(Bloque.SubString(2,2)=="17")
  Resultado+="Diecisiete";
  if(Bloque.SubString(2,2)=="18")
  Resultado+="Dieciocho";
 if(Bloque.SubString(2,2)=="19")
  Resultado+="Diecinueve";
}

 if(Bloque.SubString(2,1)=="2")
  if(Bloque.SubString(3,1)=="0")
   Resultado+="Veinte";
  else
   Resultado+="Veinti";
 if(Bloque.SubString(2,1)=="3")
  if(Bloque.SubString(3,1)=="0")
   Resultado+="Treinta";
  else
   Resultado+="Treinta y ";

 if(Bloque.SubString(2,1)=="4")
  if(Bloque.SubString(3,1)=="0")
   Resultado+="Cuarenta";
  else
   Resultado+="Cuarenta y ";
 if(Bloque.SubString(2,1)=="5")
  if(Bloque.SubString(3,1)=="0")
   Resultado+="Cincuenta";
  else
   Resultado+="Cincuenta y ";
 if(Bloque.SubString(2,1)=="6")
  if(Bloque.SubString(3,1)=="0")
   Resultado+="Sesenta";
  else
   Resultado+="Sesenta y ";
 if(Bloque.SubString(2,1)=="7")
  if(Bloque.SubString(3,1)=="0")
   Resultado+="Setenta";
  else
   Resultado+="Setenta y ";
 if(Bloque.SubString(2,1)=="8")
  if(Bloque.SubString(3,1)=="0")
   Resultado+="Ochenta";
  else
   Resultado+="Ochenta y ";
 if(Bloque.SubString(2,1)=="9")
  if(Bloque.SubString(3,1)=="0")
   Resultado+="Noventa";
  else
   Resultado+="Noventa y ";
//___________unidades______________
if(Bloque.SubString(2,1)!="1")
{
 if(Bloque.SubString(3,1)=="1")
  if(Bloque.SubString(1,2)=="00")
   Resultado="Un";//Otra anomalia
  else
   Resultado+="un";
 if(Bloque.SubString(3,1)=="2")
  Resultado+="dos";
 if(Bloque.SubString(3,1)=="3")
  Resultado+="tres";
 if(Bloque.SubString(3,1)=="4")
  Resultado+="cuatro";
 if(Bloque.SubString(3,1)=="5")
  Resultado+="cinco";
  if(Bloque.SubString(3,1)=="6")
  Resultado+="seis";
  if(Bloque.SubString(3,1)=="7")
  Resultado+="siete";
 if(Bloque.SubString(3,1)=="8")
  Resultado+="ocho";
 if(Bloque.SubString(3,1)=="9")
  Resultado+="nueve";
}
return Resultado;


}
//----------------------------------------------------------------------------
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mostrar mensajes de anteriores:   
Cambiar a:  
No puedes publicar temas nuevos en este foro
No puedes responder a temas en este foro
No puedes editar tus mensajes en este foro
No puedes borrar tus mensajes en este foro
No puedes votar en las encuestas de este foro


Hosting WordPress Indedmedia desde 3,99 €
© 2002–2026 Club Builder · Funciona con phpBB.