Hola que tal yo tengo un algoritmo en builder c++ que tal ves te pueda servir, este codigo yo lo utilice para inprimir en la cantidad de una factura en letras, esta sencillo ojala y te sirva, tambien lo tengo para delphi si lo necesitas; a esta funcion solo tienes que enviarle el los parametros de TotInv que es el numero a convertir a letras y la Moneda que es la teminacio de dolares USD o pesos MN:
Código:
TotInv = 1350.50
Moneda = -1
AnsiString Leyenda(AnsiString TotInv,AnsiString Moneda)
{
String Unidades[29];
String Decenas[7];
String Centenas[9];
float Decimal;
int Importe,X;
bool Cien,Miles,De;
AnsiString ImptoStr,retleyenda;
retleyenda = "";
Unidades[0] = "UN";
Unidades[1] = "DOS";
Unidades[2] = "TRES";
Unidades[3] = "CUATRO";
Unidades[4] = "CINCO";
Unidades[5] = "SEIS";
Unidades[6] = "SIETE";
Unidades[7] = "OCHO";
Unidades[8] = "NUEVE";
Unidades[9] = "DIEZ";
Unidades[10] = "ONCE";
Unidades[11] = "DOCE";
Unidades[12] = "TRECE";
Unidades[13] = "CATORCE";
Unidades[14] = "QUINCE";
Unidades[15] = "DIECISEIS";
Unidades[16] = "DIECISIETE";
Unidades[17] = "DIECIOCHO";
Unidades[18] = "DIECINUEVE";
Unidades[19] = "VEINTE";
Unidades[20] = "VEINTIUN";
Unidades[21] = "VEINTIDOS";
Unidades[22] = "VEINTITRES";
Unidades[23] = "VEINTICUATRO";
Unidades[24] = "VEINTICINCO";
Unidades[25] = "VEINTISEIS";
Unidades[26] = "VEINTISIETE";
Unidades[27] = "VEINTIOCHO";
Unidades[28] = "VEINTINUEVE";
Decenas[0] = "TREINTA";
Decenas[1] = "CUARENTA";
Decenas[2] = "CINCUENTA";
Decenas[3] = "SESENTA";
Decenas[4] = "SETENTA";
Decenas[5] = "OCHENTA";
Decenas[6] = "NOVENTA";
Centenas[0] = "CIEN";
Centenas[1] = "DOSCIENTOS";
Centenas[2] = "TRESCIENTOS";
Centenas[3] = "CUATROCIENTOS";
Centenas[4] = "QUINIENTOS";
Centenas[5] = "SEISCIENTOS";
Centenas[6] = "SETECIENTOS";
Centenas[7] = "OCHOCIENTOS";
Centenas[8] = "NOVECIENTOS";
Importe = StrToFloat(TotInv);
Decimal = FormatFloat("#,##0.00",StrToFloat(TotInv)) - Importe;
ImptoStr = "(";
Cien = false;
Miles = false;
De = false;
if(Importe >= 1000000)
{
X = Importe/1000000;
De = true;
Importe = Importe % 1000000;
if (X != 1)
ImptoStr = ImptoStr + " " + Unidades[X-1] + " MILLONES ";
else
ImptoStr = ImptoStr + "UN MILLON";
}
if (Importe != 0 )
De = false;
if (Importe >= 100000)
{
X = Importe/100000;
Importe = Importe % 100000;
ImptoStr = ImptoStr + " " + Centenas[X-1];
Miles = true;
if(X == 1)
Cien = True;
}
if(Importe >= 30000)
{
Miles = True;
X = Importe / 10000;
Importe = Importe % 10000;
if(Cien)
{
ImptoStr = ImptoStr + "TO";
Cien = False;
}
ImptoStr = ImptoStr + " " + Decenas[X-3];
if ( (Importe < 10000) & (Importe >= 1000))
ImptoStr = ImptoStr + " Y";
}
if((Importe >= 1000) & (Importe < 30000))
{
Miles = True;
X = Importe / 1000;
Importe = Importe % 1000;
if(Cien)
{
ImptoStr = ImptoStr + "TO";
Cien = False;
}
ImptoStr = ImptoStr + " " + Unidades[X-1];
}
if(Miles)
{
ImptoStr = ImptoStr + " MIL";
Cien = False;
}
if(Importe >= 100)
{
X = Importe / 100;
Importe = Importe % 100;
ImptoStr = ImptoStr + " " + Centenas[X-1];
if(X == 1)
Cien = True;
}
if(Importe >= 30)
{
X = Importe / 10;
Importe = Importe % 10;
if(Cien)
{
ImptoStr = ImptoStr + "TO";
Cien = False;
}
ImptoStr = ImptoStr + " " + Decenas[X-3];
if(Importe != 0)
ImptoStr = ImptoStr + " Y";
}
if(Importe >= 1)
{
if(Cien)
ImptoStr = ImptoStr + "TO";
ImptoStr = ImptoStr + " " + Unidades[Importe-1];
}
if(Moneda == -1)
if(De)
retleyenda = ImptoStr + " DE PESOS " + FormatFloat("00",Decimal * 100) + "/100 M.N.)";
else
retleyenda = ImptoStr + " PESOS " + FormatFloat("00",Decimal * 100) + "/100 M.N.)";
else
retleyenda = ImptoStr + " DOLARES " + FormatFloat("00",Decimal * 100)+ "/100 USD)";
return retleyenda;
}