Answered by:
Convertir numeros decimales a letras

-
Hola que tal buenas noches. Necesito una ayuda urgentemente, me surgio un problema de ultimo momento y necesito resolverlo. Quiisera saber como puedo pasar un numero a letras pero que contenga DECIMALES y sea con un velor del tipo DOUBLE. Buscando en internet encontré este codigo, pero me me arroga Excepción no controlada del tipo 'System.StackOverflowException' ¿Alguien sabe de una forma para arreglar esto? ¿Con este código u otro?
Private Function Num2Text(ByVal value As Double) As String 'convierte los numeros a letras (solo en español) Select Case value Case 0 : Num2Text = "cero" Case 1 : Num2Text = "un" Case 2 : Num2Text = "dos" Case 3 : Num2Text = "tres" Case 4 : Num2Text = "cuatro" Case 5 : Num2Text = "cinco" Case 6 : Num2Text = "seis" Case 7 : Num2Text = "siete" Case 8 : Num2Text = "ocho" Case 9 : Num2Text = "nueve" Case 10 : Num2Text = "diez" Case 11 : Num2Text = "once" Case 12 : Num2Text = "doce" Case 13 : Num2Text = "trece" Case 14 : Num2Text = "catorce" Case 15 : Num2Text = "quince" Case Is < 20 : Num2Text = "dieci" & Num2Text(value - 10) Case 20 : Num2Text = "veinte" Case Is < 30 : Num2Text = "venti" & Num2Text(value - 20) Case 30 : Num2Text = "treinta" Case 40 : Num2Text = "cuarenta" Case 50 : Num2Text = "cincuenta" Case 60 : Num2Text = "sesenta" Case 70 : Num2Text = "setenta" Case 80 : Num2Text = "ochenta" Case 90 : Num2Text = "noventa" Case Is < 100 : Num2Text = Num2Text(Int(value \ 10) * 10) & " y " & Num2Text(value Mod 10) Case 100 : Num2Text = "cien" Case Is < 200 : Num2Text = "ciento " & Num2Text(value - 100) Case 200, 300, 400, 600, 800 : Num2Text = Num2Text(Int(value \ 100)) & "cientos" Case 500 : Num2Text = "quinientos" Case 700 : Num2Text = "setencientos" Case 900 : Num2Text = "novecientos" Case Is < 1000 : Num2Text = Num2Text(Int(value \ 100) * 100) & " " & Num2Text(value Mod 100) Case 1000 : Num2Text = "mil" Case Is < 2000 : Num2Text = "mil " & Num2Text(value Mod 1000) Case Is < 1000000 : Num2Text = Num2Text(Int(value \ 1000)) & " mil" If value Mod 1000 Then Num2Text = Num2Text & " " & Num2Text(value Mod 1000) Case 1000000 : Num2Text = "Un Millon" Case Is < 2000000 : Num2Text = "Un Millon " & Num2Text(value Mod 1000000) Case Is < 1000000000000.0# : Num2Text = Num2Text(Int(value / 1000000)) & " millones " If (value - Int(value / 1000000) * 1000000) Then Num2Text = Num2Text & " " & Num2Text(value - Int(value / 1000000) * 1000000) Case 1000000000000.0# : Num2Text = "Un Billon" Case Is < 2000000000000.0# : Num2Text = "Un Billon " & Num2Text(value - Int(value / 1000000000000.0#) * 1000000000000.0#) Case Else : Num2Text = Num2Text(Int(value / 1000000000000.0#)) & " billones" If (value - Int(value / 1000000000000.0#) * 1000000000000.0#) Then Num2Text = Num2Text & " " & Num2Text(value - Int(value / 1000000000000.0#) * 1000000000000.0#) End Select End Function
Question
Answers
-
fuente:
http://social.msdn.microsoft.com/Forums/es-ES/vbes/thread/33edceaa-451f-42ce-b674-54961e8c6ef1#66a96a7c-dd0c-45c5-8a4a-e5d9323e19cb
que contiene este codigo:
tengo otro codigo que ya he probado.
1. crea un proyecto
2. crea dos textbox (txtletra y textnum)
3.crea un button
dale doble clic en el button y te mandara la codigo y ahi pegas esto :
TxtLetra.Text = "" If IsNumeric(TextNum.Text) Then TxtLetra.Text = Letras(TextNum.Text) Else MessageBox.Show("Ingrese por favor números", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Information) End If TextNum.Focus() TextNum.SelectionStart = 0 TextNum.SelectionLength = TextNum.ToString.Length
4. crear un modulo, añades un modulo al proyecto llamado "aletras" (sin comillas")
y en tu modulo dale doble clic y pega este codigo:
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
- Proposed as answer by J. Miguel Monday, November 30, 2009 4:57 AM
- Marked as answer by Ivana Yael Wednesday, December 02, 2009 11:36 PM
All replies
-
hola
creo que algo como esto puede ser de utilidad
Convertir Número a Letras en VB.Net
Convertir numero a letras
Convertir Número a Texto
saludos
Leandro Tuttini
Blog
Buenos Aires
Argentina -
fuente:
http://social.msdn.microsoft.com/Forums/es-ES/vbes/thread/33edceaa-451f-42ce-b674-54961e8c6ef1#66a96a7c-dd0c-45c5-8a4a-e5d9323e19cb
que contiene este codigo:
tengo otro codigo que ya he probado.
1. crea un proyecto
2. crea dos textbox (txtletra y textnum)
3.crea un button
dale doble clic en el button y te mandara la codigo y ahi pegas esto :
TxtLetra.Text = "" If IsNumeric(TextNum.Text) Then TxtLetra.Text = Letras(TextNum.Text) Else MessageBox.Show("Ingrese por favor números", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Information) End If TextNum.Focus() TextNum.SelectionStart = 0 TextNum.SelectionLength = TextNum.ToString.Length
4. crear un modulo, añades un modulo al proyecto llamado "aletras" (sin comillas")
y en tu modulo dale doble clic y pega este codigo:
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
- Proposed as answer by J. Miguel Monday, November 30, 2009 4:57 AM
- Marked as answer by Ivana Yael Wednesday, December 02, 2009 11:36 PM
-
-
-
desde Guatemala hola y buenas tardes, estoy buscando ayuda de como convertir numeros a letras para utilizarlo en access 2003 y encontre la ayuda que has posteado, gracias, podrias indicarme como utilizarlo. me ayudaria mucho.
Private Function Num2Text(ByVal value As Double) As String 'convierte los numeros a letras (solo en español) Select Case value Case 0 : Num2Text = "cero" Case 1 : Num2Text = "un" Case 2 : Num2Text = "dos" Case 3 : Num2Text = "tres" Case 4 : Num2Text = "cuatro" Case 5 : Num2Text = "cinco" Case 6 : Num2Text = "seis" Case 7 : Num2Text = "siete" Case 8 : Num2Text = "ocho" Case 9 : Num2Text = "nueve" Case 10 : Num2Text = "diez" Case 11 : Num2Text = "once" Case 12 : Num2Text = "doce" Case 13 : Num2Text = "trece" Case 14 : Num2Text = "catorce" Case 15 : Num2Text = "quince" Case Is < 20 : Num2Text = "dieci" & Num2Text(value - 10) Case 20 : Num2Text = "veinte" Case Is < 30 : Num2Text = "venti" & Num2Text(value - 20) Case 30 : Num2Text = "treinta" Case 40 : Num2Text = "cuarenta" Case 50 : Num2Text = "cincuenta" Case 60 : Num2Text = "sesenta" Case 70 : Num2Text = "setenta" Case 80 : Num2Text = "ochenta" Case 90 : Num2Text = "noventa" Case Is < 100 : Num2Text = Num2Text(Int(value \ 10) * 10) & " y " & Num2Text(value Mod 10) Case 100 : Num2Text = "cien" Case Is < 200 : Num2Text = "ciento " & Num2Text(value - 100) Case 200, 300, 400, 600, 800 : Num2Text = Num2Text(Int(value \ 100)) & "cientos" Case 500 : Num2Text = "quinientos" Case 700 : Num2Text = "setencientos" Case 900 : Num2Text = "novecientos" Case Is < 1000 : Num2Text = Num2Text(Int(value \ 100) * 100) & " " & Num2Text(value Mod 100) Case 1000 : Num2Text = "mil" Case Is < 2000 : Num2Text = "mil " & Num2Text(value Mod 1000) Case Is < 1000000 : Num2Text = Num2Text(Int(value \ 1000)) & " mil" If value Mod 1000 Then Num2Text = Num2Text & " " & Num2Text(value Mod 1000) Case 1000000 : Num2Text = "Un Millon" Case Is < 2000000 : Num2Text = "Un Millon " & Num2Text(value Mod 1000000) Case Is < 1000000000000.0# : Num2Text = Num2Text(Int(value / 1000000)) & " millones " If (value - Int(value / 1000000) * 1000000) Then Num2Text = Num2Text & " " & Num2Text(value - Int(value / 1000000) * 1000000) Case 1000000000000.0# : Num2Text = "Un Billon" Case Is < 2000000000000.0# : Num2Text = "Un Billon " & Num2Text(value - Int(value / 1000000000000.0#) * 1000000000000.0#) Case Else : Num2Text = Num2Text(Int(value / 1000000000000.0#)) & " billones" If (value - Int(value / 1000000000000.0#) * 1000000000000.0#) Then Num2Text = Num2Text & " " & Num2Text(value - Int(value / 1000000000000.0#) * 1000000000000.0#) End Select End Function