lunes, 13 de agosto de 2007

Traductor de numeros a letras en C#

// traductor de numeros a letras
public string[] sUnidades = {"", "un", "dos", "tres", "cuatro", "cinco", "seis", "siete", "ocho", "nueve", "diez",
"once", "doce", "trece", "catorce", "quince", "dieciseis", "diecisiete", "dieciocho", "diecinueve", "veinte",
"veintiún", "veintidos", "veintitres", "veinticuatro", "veinticinco", "veintiseis", "veintisiete", "veintiocho", "veintinueve"};
public string[] sDecenas = {"", "diez", "veinte", "treinta", "cuarenta", "cincuenta", "sesenta", "setenta", "ochenta", "noventa"};
public string[] sCentenas = {"", "ciento", "doscientos", "trescientos", "cuatrocientos", "quinientos", "seiscientos", "setecientos", "ochocientos", "novecientos"};
public string sResultado = "";


public string traduce_numeros (string sNumero) {
double dNumero;
double dNumAux = 0;
char x;
string sAux;

sResultado = " ";
try {
dNumero = Convert.ToDouble (sNumero);
}
catch {
return "";
}

if (dNumero > 999999999999)
return "";

if (dNumero > 999999999) {
dNumAux = dNumero % 1000000000000;
sResultado += Numeros (dNumAux, 1000000000) + " mil ";
}

if (dNumero > 999999) {
dNumAux = dNumero % 1000000000;
sResultado += Numeros (dNumAux, 1000000) + " millones ";
}

if (dNumero > 999) {
dNumAux = dNumero % 1000000;
sResultado += Numeros (dNumAux, 1000) + " mil ";
}

dNumAux = dNumero % 1000;
sResultado += Numeros (dNumAux, 1);


//Enseguida verificamos si contiene punto, si es así, los convertimos a texto.
sAux = dNumero.ToString();

if (sAux.IndexOf(".") >= 0)
sResultado += ObtenerDecimales (sAux);

//Las siguientes líneas convierten el primer caracter a mayúscula.
sAux = sResultado;
x = char.ToUpper (sResultado[1]);
sResultado = x.ToString ();

for (int i = 2; i 999999999999)
return "";

if (dNumero > 999999999) {
dNumAux = dNumero % 1000000000000;
sResultado += Numeros (dNumAux, 1000000000) + " mil ";
}

if (dNumero > 999999) {
dNumAux = dNumero % 1000000000;
sResultado += Numeros (dNumAux, 1000000) + " millones ";
}

if (dNumero > 999) {
dNumAux = dNumero % 1000000;
sResultado += Numeros (dNumAux, 1000) + " mil ";
}

dNumAux = dNumero % 1000;
sResultado += Numeros (dNumAux, 1);


//Enseguida verificamos si contiene punto, si es así, los convertimos a texto.
sAux = dNumero.ToString();

if (sAux.IndexOf(".") >= 0)
sResultado += ObtenerDecimales (sAux);

//Las siguientes líneas convierten el primer caracter a mayúscula.
sAux = sResultado;
x = char.ToUpper (sResultado[1]);
sResultado = x.ToString ();

for (int i = 2; i= 100){
dNumero = dCociente / 100;
sNumero = dNumero.ToString();
iNumero = int.Parse (sNumero[0].ToString());
sTexto += this.sCentenas [iNumero] + " ";
}

dCociente = dCociente % 100;
if (dCociente >= 30){
dNumero = dCociente / 10;
sNumero = dNumero.ToString();
iNumero = int.Parse (sNumero[0].ToString());
if (iNumero > 0)
sTexto += this.sDecenas [iNumero] + " ";

dNumero = dCociente % 10;
sNumero = dNumero.ToString();
iNumero = int.Parse (sNumero[0].ToString());
if (iNumero > 0)
sTexto += "y " + this.sUnidades [iNumero] + " ";
}

else {
dNumero = dCociente;
sNumero = dNumero.ToString();
if (sNumero.Length > 1)
if (sNumero[1] != '.')
iNumero = int.Parse (sNumero[0].ToString() + sNumero[1].ToString());
else
iNumero = int.Parse (sNumero[0].ToString());
else
iNumero = int.Parse (sNumero[0].ToString());
sTexto += this.sUnidades[iNumero] + " ";
}

return sTexto;
}

private string ObtenerDecimales (string sNumero) {
string[] sNumPuntos;
string sTexto = "";
double dNumero = 0;

sNumPuntos = sNumero.Split('.');

dNumero = Convert.ToDouble(sNumPuntos[1]);
sTexto = "peso "+dNumero.ToString().Trim()+"/100 M.N.";
//sTexto = "peso con " + Numeros(dNumero,1);

return sTexto;
}

6 comentarios:

Juan Cristóbal Olivares dijo...

Te recomiendo que uses String.Empty en vez de "". Además, podrías dejar los arreglos públicos como arreglos privados y readonly, así aumentas la performance ya que no tienen que incializarse en cada instancia.

Daniel Olivares Cuevas dijo...

Gracias creo que cambiare todo eso en el sistema

Saludos

Daniel Olivares Cuevas dijo...

Cual es la diferencia ??

// Variable publicas,
public string.Empty LoginEmpleado;
public string.Empty NomEmpleado;
public string.Empty AppEmpleado;
public string.Empty ApmEmpleado;
public string.Empty enter_en;

public string accesoHIS = "";
public string accesoERP = "";
public string accesoGENERAL = "";

Daniel Olivares Cuevas dijo...

[Task:File=/opt/osiris/osiris/hscmty.cs, Line=126, Column=16, Type=Error, Description=Parsing error(CS8025)

creo que para variables publicas no fucniona ??

Anónimo dijo...

Sie hat der einfach glänzende Gedanke besucht levitra preis viagra generika [url=http//t7-isis.org]viagra generika[/url]

Anónimo dijo...

Everyone to whom much is given, of him will much be required.