Convertir Número a Letras en VB.Net Fecha: 10/Feb/2005 (08 de Febrero del 2005)
|
Más de uno nos hemos roto en algún momento de nuestra vida la cabeza por querer desarrollar una rutina que nos permita convertir números a letras, es por ello que decidí compartir con todos uds. el presente artículo.
Consiste en una aplicación desarrollada en VB.Net apoyada con un módulo que recibe como parametro el valor ingresado y lo convierte en letras dependiendo si es positivo o negativo.A continuación lo detallo en forma más específica:
Public Class FrmNumeroaletra Inherits System.Windows.Forms.Form '**************************************** 'Desarrollado por: Pedro Alex Taya Yactayo 'Email: [email protected] 'Web: http://es.geocities.com/wiseman_alextaya ' http://groups.msn.com/mugcanete '**************************************** #Region " Código generado por el Diseñador de Windows Forms " Public Sub New() MyBase.New() 'El Diseñador de Windows Forms requiere esta llamada. InitializeComponent() 'Agregar cualquier inicialización después de la llamada a InitializeComponent() End Sub 'Form reemplaza a Dispose para limpiar la lista de componentes. Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean) If disposing Then If Not (components Is Nothing) Then components.Dispose() End If End If MyBase.Dispose(disposing) End Sub 'Requerido por el Diseñador de Windows Forms Private components As System.ComponentModel.IContainer 'NOTA: el Diseñador de Windows Forms requiere el siguiente procedimiento 'Puede modificarse utilizando el Diseñador de Windows Forms. 'No lo modifique con el editor de código. Friend WithEvents Label1 As System.Windows.Forms.Label Friend WithEvents Label2 As System.Windows.Forms.Label Friend WithEvents CmdConvertir As System.Windows.Forms.Button Friend WithEvents TxtNumero As System.Windows.Forms.TextBox Friend WithEvents TxtLetra As System.Windows.Forms.TextBox Friend WithEvents Timer1 As System.Windows.Forms.Timer Friend WithEvents credito As System.Windows.Forms.Label <System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent() Me.components = New System.ComponentModel.Container Dim resources As System.Resources.ResourceManager = New System.Resources.ResourceManager(GetType(FrmNumeroaletra)) Me.Label1 = New System.Windows.Forms.Label Me.Label2 = New System.Windows.Forms.Label Me.CmdConvertir = New System.Windows.Forms.Button Me.TxtNumero = New System.Windows.Forms.TextBox Me.TxtLetra = New System.Windows.Forms.TextBox Me.credito = New System.Windows.Forms.Label Me.Timer1 = New System.Windows.Forms.Timer(Me.components) Me.SuspendLayout() ' 'Label1 ' Me.Label1.AutoSize = True Me.Label1.Font = New System.Drawing.Font("Arial", 9.75!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) Me.Label1.ForeColor = System.Drawing.Color.Navy Me.Label1.Location = New System.Drawing.Point(8, 8) Me.Label1.Name = "Label1" Me.Label1.Size = New System.Drawing.Size(38, 18) Me.Label1.TabIndex = 3 Me.Label1.Text = "Valor" ' 'Label2 ' Me.Label2.AutoSize = True Me.Label2.Font = New System.Drawing.Font("Arial", 9.75!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) Me.Label2.ForeColor = System.Drawing.Color.FromArgb(CType(64, Byte), CType(0, Byte), CType(0, Byte)) Me.Label2.Location = New System.Drawing.Point(8, 40) Me.Label2.Name = "Label2" Me.Label2.Size = New System.Drawing.Size(66, 18) Me.Label2.TabIndex = 4 Me.Label2.Text = "En Letras" ' 'CmdConvertir ' Me.CmdConvertir.BackColor = System.Drawing.Color.Navy Me.CmdConvertir.Cursor = System.Windows.Forms.Cursors.Hand Me.CmdConvertir.FlatStyle = System.Windows.Forms.FlatStyle.Flat Me.CmdConvertir.ForeColor = System.Drawing.Color.White Me.CmdConvertir.Location = New System.Drawing.Point(232, 8) Me.CmdConvertir.Name = "CmdConvertir" Me.CmdConvertir.TabIndex = 1 Me.CmdConvertir.Text = "&Convertir" ' 'TxtNumero ' Me.TxtNumero.Location = New System.Drawing.Point(88, 8) Me.TxtNumero.Name = "TxtNumero" Me.TxtNumero.Size = New System.Drawing.Size(128, 20) Me.TxtNumero.TabIndex = 0 Me.TxtNumero.Text = "" ' 'TxtLetra ' Me.TxtLetra.Location = New System.Drawing.Point(88, 40) Me.TxtLetra.Name = "TxtLetra" Me.TxtLetra.ReadOnly = True Me.TxtLetra.Size = New System.Drawing.Size(456, 20) Me.TxtLetra.TabIndex = 2 Me.TxtLetra.Text = "" ' 'credito ' Me.credito.Font = New System.Drawing.Font("Microsoft Sans Serif", 6.75!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) Me.credito.ForeColor = System.Drawing.Color.Green Me.credito.Location = New System.Drawing.Point(312, 64) Me.credito.Name = "credito" Me.credito.Size = New System.Drawing.Size(232, 40) Me.credito.TabIndex = 5 Me.credito.Text = "Desarrollado por: Pedro Alex Taya Yactayo [email protected] http:"//es.geociti" & _ "es.com/wiseman_alextaya" Me.credito.TextAlign = System.Drawing.ContentAlignment.TopRight ' 'Timer1 ' Me.Timer1.Enabled = True Me.Timer1.Interval = 500 ' 'FrmNumeroaletra ' Me.AcceptButton = Me.CmdConvertir Me.AutoScaleBaseSize = New System.Drawing.Size(5, 13) Me.ClientSize = New System.Drawing.Size(550, 100) Me.Controls.Add(Me.credito) Me.Controls.Add(Me.TxtLetra) Me.Controls.Add(Me.TxtNumero) Me.Controls.Add(Me.CmdConvertir) Me.Controls.Add(Me.Label2) Me.Controls.Add(Me.Label1) Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.Fixed3D Me.Icon = CType(resources.GetObject("$this.Icon"), System.Drawing.Icon) Me.MaximizeBox = False Me.Name = "FrmNumeroaletra" Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen Me.Text = "Convertir Número a Letra" Me.ResumeLayout(False) End Sub #End Region Private Sub CmdConvertir_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CmdConvertir.Click TxtLetra.Text = "" If IsNumeric(TxtNumero.Text) Then TxtLetra.Text = Letras(TxtNumero.Text) Else MessageBox.Show("Ingrese por favor números", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Information) End If TxtNumero.Focus() TxtNumero.SelectionStart = 0 TxtNumero.SelectionLength = TxtNumero.ToString.Length End Sub Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick Static cColor As String If cColor = "" Then credito.ForeColor = System.Drawing.Color.Blue cColor = "a" Else credito.ForeColor = System.Drawing.Color.Green cColor = "" End If End Sub End ClassLuego tenemos que crear el siguiente Módulo:Module aletras '**************************************** 'Desarrollado por: Pedro Alex Taya Yactayo 'Email: [email protected] 'Web: http://es.geocities.com/wiseman_alextaya ' http://groups.msn.com/mugcanete '**************************************** Public Function Letras(ByVal numero As String) As String '********Declara variables de tipo cadena************ Dim palabras, entero, dec, flag As String '********Declara variables de tipo entero*********** Dim num, x, y As Integer flag = "N" '**********Número Negativo*********** If Mid(numero, 1, 1) = "-" Then numero = Mid(numero, 2, numero.ToString.Length - 1).ToString palabras = "menos " End If '**********Si tiene ceros a la izquierda************* For x = 1 To numero.ToString.Length If Mid(numero, 1, 1) = "0" Then numero = Trim(Mid(numero, 2, numero.ToString.Length).ToString) If Trim(numero.ToString.Length) = 0 Then palabras = "" Else Exit For End If Next '*********Dividir parte entera y decimal************ For y = 1 To Len(numero) If Mid(numero, y, 1) = "." Then flag = "S" Else If flag = "N" Then entero = entero + Mid(numero, y, 1) Else dec = dec + Mid(numero, y, 1) End If End If Next y If Len(dec) = 1 Then dec = dec & "0" '**********proceso de conversión*********** flag = "N" If Val(numero) <= 999999999 Then For y = Len(entero) To 1 Step -1 num = Len(entero) - (y - 1) Select Case y Case 3, 6, 9 '**********Asigna las palabras para las centenas*********** Select Case Mid(entero, num, 1) Case "1" If Mid(entero, num + 1, 1) = "0" And Mid(entero, num + 2, 1) = "0" Then palabras = palabras & "cien " Else palabras = palabras & "ciento " End If Case "2" palabras = palabras & "doscientos " Case "3" palabras = palabras & "trescientos " Case "4" palabras = palabras & "cuatrocientos " Case "5" palabras = palabras & "quinientos " Case "6" palabras = palabras & "seiscientos " Case "7" palabras = palabras & "setecientos " Case "8" palabras = palabras & "ochocientos " Case "9" palabras = palabras & "novecientos " End Select Case 2, 5, 8 '*********Asigna las palabras para las decenas************ Select Case Mid(entero, num, 1) Case "1" If Mid(entero, num + 1, 1) = "0" Then flag = "S" palabras = palabras & "diez " End If If Mid(entero, num + 1, 1) = "1" Then flag = "S" palabras = palabras & "once " End If If Mid(entero, num + 1, 1) = "2" Then flag = "S" palabras = palabras & "doce " End If If Mid(entero, num + 1, 1) = "3" Then flag = "S" palabras = palabras & "trece " End If If Mid(entero, num + 1, 1) = "4" Then flag = "S" palabras = palabras & "catorce " End If If Mid(entero, num + 1, 1) = "5" Then flag = "S" palabras = palabras & "quince " End If If Mid(entero, num + 1, 1) > "5" Then flag = "N" palabras = palabras & "dieci" End If Case "2" If Mid(entero, num + 1, 1) = "0" Then palabras = palabras & "veinte " flag = "S" Else palabras = palabras & "veinti" flag = "N" End If Case "3" If Mid(entero, num + 1, 1) = "0" Then palabras = palabras & "treinta " flag = "S" Else palabras = palabras & "treinta y " flag = "N" End If Case "4" If Mid(entero, num + 1, 1) = "0" Then palabras = palabras & "cuarenta " flag = "S" Else palabras = palabras & "cuarenta y " flag = "N" End If Case "5" If Mid(entero, num + 1, 1) = "0" Then palabras = palabras & "cincuenta " flag = "S" Else palabras = palabras & "cincuenta y " flag = "N" End If Case "6" If Mid(entero, num + 1, 1) = "0" Then palabras = palabras & "sesenta " flag = "S" Else palabras = palabras & "sesenta y " flag = "N" End If Case "7" If Mid(entero, num + 1, 1) = "0" Then palabras = palabras & "setenta " flag = "S" Else palabras = palabras & "setenta y " flag = "N" End If Case "8" If Mid(entero, num + 1, 1) = "0" Then palabras = palabras & "ochenta " flag = "S" Else palabras = palabras & "ochenta y " flag = "N" End If Case "9" If Mid(entero, num + 1, 1) = "0" Then palabras = palabras & "noventa " flag = "S" Else palabras = palabras & "noventa y " flag = "N" End If End Select Case 1, 4, 7 '*********Asigna las palabras para las unidades********* Select Case Mid(entero, num, 1) Case "1" If flag = "N" Then If y = 1 Then palabras = palabras & "uno " Else palabras = palabras & "un " End If End If Case "2" If flag = "N" Then palabras = palabras & "dos " Case "3" If flag = "N" Then palabras = palabras & "tres " Case "4" If flag = "N" Then palabras = palabras & "cuatro " Case "5" If flag = "N" Then palabras = palabras & "cinco " Case "6" If flag = "N" Then palabras = palabras & "seis " Case "7" If flag = "N" Then palabras = palabras & "siete " Case "8" If flag = "N" Then palabras = palabras & "ocho " Case "9" If flag = "N" Then palabras = palabras & "nueve " End Select End Select '***********Asigna la palabra mil*************** If y = 4 Then If Mid(entero, 6, 1) <> "0" Or Mid(entero, 5, 1) <> "0" Or Mid(entero, 4, 1) <> "0" Or _ (Mid(entero, 6, 1) = "0" And Mid(entero, 5, 1) = "0" And Mid(entero, 4, 1) = "0" And _ Len(entero) <= 6) Then palabras = palabras & "mil " End If '**********Asigna la palabra millón************* If y = 7 Then If Len(entero) = 7 And Mid(entero, 1, 1) = "1" Then palabras = palabras & "millón " Else palabras = palabras & "millones " End If End If Next y '**********Une la parte entera y la parte decimal************* If dec <> "" Then Letras = palabras & "con " & dec Else Letras = palabras End If Else Letras = "" End If End Function End ModuleEspero les sirva de algo esta rutina, si es así por favor colabora conmigo votando por este artículo.
Hasta la próxima oportunidad.....:=)
Espacios de nombres usados en el código de este artículo:
System.Windows.Forms.Form
Fichero con el código de ejemplo: alextaya_numeroaletra.zip - 11 KB