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 

Convertir una cifra numerica a cantidad en letra

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Consultas
Ver tema anterior :: Ver tema siguiente  
Autor Mensaje
Mensaje    Asunto: Convertir una cifra numerica a cantidad en letra Responder citando

Hola,

estoy buscando una funcion en C/C++ que convierta
un numero, con decimales en letras.

Ejemplo:

928,02 € -> Novecientos veintiocho euros con dos céntimos

Gracias,

Un saludo
Volver arriba
Mensaje    Asunto: Responder citando

Esta en pascal, pero posiblemente puedas traducirlo a C++ sin dificultad:

http://www.clubdelphi.com/vertruco.php?id=434
_________________
Crandel

"hay 10 tipos de personas, las que ven en binario y las que no"

Angel Zeitoune - Artículo: Generación de eventos en C++Builder
Volver arriba
Ver perfil de usuario Enviar mensaje privado Visitar sitio web del autor MSN Messenger
Mensaje    Asunto: Responder citando

Aqui tienes una dll que realiza esa funcion:

http://www.arrakis.es/~rporcar/Articles/NumToTxt.zip
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Responder citando

un enlace
https://cppbuilder.es/viewtopic.php?t=7420&highlight=notolet

y si quieres, la funcion, ya corregida,
aqui la tienes, comento, que la funcion, permite decimales.


Código:

//---------------------------------------------------------------------------
// Funcion que convierte un numero a su representacion en letras
// por Cesar Salazar Gonzalez.
// Nota, en Mexico/LatinoAmerica, utilizamos la coma para separar miles.
// ejemplo mil quinientas pesetas con 20 centavos, se representa asi
// 1,500.20  <-Formato mexico
// 1.500,20  <-Formato español
// manera de usarla
// AnsiString Cadena = NoToLet("12335.56);

AnsiString __fastcall NoToLet(AnsiString  CANTIDAD)
{
    AnsiString NUEVA_CANTIDAD,NUMERO,DECIMALES,LETRAS="";

// PARA LIMPIAR LAS COMAS..,en formato Mex..
    NUEVA_CANTIDAD="";
    for(int ad=1;ad<=CANTIDAD.Length();ad++)
        if(CANTIDAD[ad]!=',')
            NUEVA_CANTIDAD += CANTIDAD[ad];

//extraer la parte Entera, cuando es ".", en Formato Mex
// cambiar a "," cuando sea español
    if( NUEVA_CANTIDAD.Pos(".")> 0 ){
        NUMERO = NUEVA_CANTIDAD.SubString(1,NUEVA_CANTIDAD.Pos(".")-1);
        DECIMALES =" "+NUEVA_CANTIDAD.SubString(  NUEVA_CANTIDAD.Pos(".")+1,2)+"/100 M.N";
    }else{
        NUMERO= NUEVA_CANTIDAD;
        DECIMALES = ". 00/100 M.N.";
    }
   int p=1,l=1,des;
    int LARGO,LARGO2;
//   char N1='0',N2='0',N3='0';
   char N1,N2,N3;
   LARGO=NUMERO.Length();
   LARGO2=NUMERO.Length();
   while(l<=LARGO-1){
      if(LARGO2-3==0 || LARGO2-6==0 || LARGO2-9==0){
         p=3;
         des=3;
      }
      if(LARGO2-3==-1 || LARGO2-6==-1 || LARGO2-9==-1){
         p=2;
         des=2;
      }
      if(LARGO2-3==-2 || LARGO2-6==-2 || LARGO2-9==-2){
         p=1;
         des=1;
      }
///////////////////// numeros de Cienes.
      if(p==3){
         N1=NUMERO[l];
         N2=NUMERO[l+1];
         N3=NUMERO[l+2];
         switch(N1){
            case '0':
                  l++;
                  p--;
                  break;
            case '1':
                  if(N2=='0' && N3=='0'){
                        LETRAS.Insert(" CIEN ",LETRAS.Length()+1);
                     l+=2;
                     p-=2;
                  }else{
                            LETRAS.Insert(" CIENTO ",LETRAS.Length()+1);
                     l++;
                     p--;
                  }
                  break;
            case '2':
                        LETRAS.Insert(" DOSCIENTOS ",LETRAS.Length()+1);
                  l++;
                  p--;
                  break;
            case '3':
                        LETRAS.Insert(" TRESCIENTOS ",LETRAS.Length()+1);
                  l++;
                  p--;
                  break;
            case '4':
                        LETRAS.Insert(" CUATROCIENTOS ",LETRAS.Length()+1);
                  l++;
                  p--;
                  break;
            case '5':
                        LETRAS.Insert(" QUINIENTOS ",LETRAS.Length()+1);
                  l++;
                  p--;
                  break;
            case '6':
                        LETRAS.Insert(" SEISCIENTOS ",LETRAS.Length()+1);
                  l++;
                  p--;
                  break;
            case '7':
                        LETRAS.Insert(" SETECIENTOS ",LETRAS.Length()+1);
                  l++;
                  p--;
                  break;
            case '8':
                        LETRAS.Insert(" OCHOCIENTOS ",LETRAS.Length()+1);
                  l++;
                  p--;
                  break;
            case '9':
                        LETRAS.Insert(" NOVECIENTOS ",LETRAS.Length()+1);
                  l++;
                  p--;
                  break;
         }
      }
///////////////////// numeros de decenas.
      if(p==2){
         N1=NUMERO[l];
         N2=NUMERO[l+1];
         switch(N1){
            case '0':
                  l++;
                  p--;
                  break;
            case '1':
                  if(N2!='0'){
                     switch(N2){
                        case '1':
                                        LETRAS.Insert(" ONCE ",LETRAS.Length()+1);
                              break;
                        case '2':
                                        LETRAS.Insert(" DOCE ",LETRAS.Length()+1);
                              break;
                        case '3':
                                        LETRAS.Insert(" TRECE ",LETRAS.Length()+1);
                              break;
                        case '4':
                                        LETRAS.Insert(" CATORCE ",LETRAS.Length()+1);
                              break;
                        case '5':
                                        LETRAS.Insert(" QUINCE ",LETRAS.Length()+1);
                              break;
                        case '6':
                                        LETRAS.Insert(" DIECISEIS ",LETRAS.Length()+1);
                              break;
                        case '7':
                                        LETRAS.Insert(" DIECISIETE ",LETRAS.Length()+1);
                              break;
                        case '8':
                                        LETRAS.Insert(" DIECIOCHO ",LETRAS.Length()+1);
                              break;
                        case '9':
                                        LETRAS.Insert(" DIECINUEVE ",LETRAS.Length()+1);
                              break;
                     }
                  }else{
                            LETRAS.Insert(" DIEZ ",LETRAS.Length()+1);
                        }
                  l+=2;
                  p-=2;
                  break;
            case '2':
                  if(N2!='0'){
                            LETRAS.Insert(" VEINTI",LETRAS.Length()+1);
                     l++;
                     p--;
                  }else{
                     LETRAS.Insert(" VEINTE ",LETRAS.Length()+1);
                     l+=2;
                     p-=2;
                  }
                  break;
            case '3':if(N2!='0'){
                     LETRAS.Insert(" TREINTA Y ",LETRAS.Length()+1);
                     l++;
                     p--;
                  }else{
                     LETRAS.Insert(" TREINTA ",LETRAS.Length()+1);
                            l+=2;
                     p-=2;
                  }
                  break;
            case '4':if(N2!='0'){
                     LETRAS.Insert(" CUARENTA Y ",LETRAS.Length()+1);
                     l++;
                     p--;
                  }else{
                     LETRAS.Insert(" CUARENTA ",LETRAS.Length()+1);
                     l+=2;
                     p-=2;
                  }
                  break;
            case '5':if(N2!='0'){
                     LETRAS.Insert(" CINCUENTA Y ",LETRAS.Length()+1);
                     l++;
                     p--;
                  }else{
                     LETRAS.Insert(" CINCUENTA ",LETRAS.Length()+1);
                     l+=2;
                     p-=2;
                  }
                  break;
            case '6':if(N2!='0'){
                     LETRAS.Insert(" SESENTA Y ",LETRAS.Length()+1);
                     l++;
                     p--;
                  }else{
                     LETRAS.Insert(" SESENTA ",LETRAS.Length()+1);
                     l+=2;
                     p-=2;
                  }
                  break;
            case '7':if(N2!='0'){
                     LETRAS.Insert(" SETENTA Y ",LETRAS.Length()+1);
                     l++;
                     p--;
                  }else{
                     LETRAS.Insert(" SETENTA ",LETRAS.Length()+1);
                     l+=2;
                     p-=2;
                  }
                  break;
            case '8':if(N2!='0'){
                     LETRAS.Insert(" OCHENTA Y ",LETRAS.Length()+1);
                     l++;
                     p--;
                  }else{
                     LETRAS.Insert(" OCHENTA ",LETRAS.Length()+1);
                     l+=2;
                     p-=2;
                  }
                  break;
            case '9':if(N2!='0'){
                     LETRAS.Insert(" NOVENTA Y ",LETRAS.Length()+1);
                     l++;
                     p--;
                  }else{
                     LETRAS.Insert(" NOVENTA ",LETRAS.Length()+1);
                     l+=2;
                     p-=2;
                  }
                  break;
         }
      }
///////////////////// numeros ordinarios.
      if(p==1){
         N1=NUMERO[l];
         switch(N1){
            case '0':
                  break;
            case '1':
                  LETRAS.Insert("UNO ",LETRAS.Length()+1);
                  break;
            case '2':
                        LETRAS.Insert("DOS ",LETRAS.Length()+1);
                  break;
            case '3':
                        LETRAS.Insert("TRES ",LETRAS.Length()+1);
                  break;
            case '4':
                        LETRAS.Insert("CUATRO ",LETRAS.Length()+1);
                  break;
            case '5':
                        LETRAS.Insert("CINCO ",LETRAS.Length()+1);
                  break;
            case '6':
                        LETRAS.Insert("SEIS ",LETRAS.Length()+1);
                  break;
            case '7':
                        LETRAS.Insert("SIETE ",LETRAS.Length()+1);
                  break;
            case '8':
                        LETRAS.Insert("OCHO ",LETRAS.Length()+1);
                  break;
            case '9':
                        LETRAS.Insert("NUEVE ",LETRAS.Length()+1);
                  break;
         }
         l++;
      }
      // miles
      if(N1!='0'){
             // en esta parte se pude insertar mas formatos
             // aun que creo que con billones es suficiente.

         if(LARGO2==11 || LARGO2==12 || LARGO2==10)
            if (LARGO2==7 && N1=='1')
                    LETRAS =" UN BILLON ";
             else
                    LETRAS.Insert(" BILLONES ",LETRAS.Length()+1);
         if(LARGO2==8 || LARGO2==9 || LARGO2==7)
            if (LARGO2==7 && N1=='1')
                    LETRAS = " UN MILLON "  ;
             else
                    LETRAS.Insert(" MILLONES ",LETRAS.Length()+1);
         if(LARGO2==5 || LARGO2==6 || LARGO2==4)
            if (LARGO2==4 && N1=='1')
                    LETRAS = " MIL ";
             else
                    LETRAS.Insert(" MIL ",LETRAS.Length()+1);
      }
      LARGO2-=des;
   }
    return "("+(LETRAS+"PESOS "+DECIMALES)+")";
}


Saludos espero te sirva
_________________
Cool
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email MSN Messenger
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.