Visual Basic.NET - Numeros a Letras en VB Net 2015

   
Vista:
Imágen de perfil de BERNARDO HECTOR

Numeros a Letras en VB Net 2015

Publicado por BERNARDO HECTOR (8 intervenciones) el 22/02/2016 11:47:12
Vamos a imprimir, un importe, que se exprese en Letras. Tenemos un importe con centavos, expresado con comas como separador de centavos. Lo volcamos una variable, en mi caso llamada "dlImport". Luego habilito estas variables para separar lo miles, de los centavos y de la coma en sí.

1
2
3
4
5
6
Dim iComa As Integer = InStr(1, CDbl(dlImport).ToString("N2"), ",", vbBinaryCompare) ' ubico la coma
Dim sCtvs As String = Mid(CDbl(dlImport).ToString("N2"), iComa + 1) ' separo los centavos
Dim sEntero As String = Mid(CDbl(dlImport).ToString("N2"), 1, iComa - 1) ' tomo Enteros, sin centavos.
 
Me.lsMsje = "Recibimos de " & sApellido & " la suma de: Pesos " & UCase(NumeroATexto.NroATexto(CInt(sEntero))) & " c/" & sCtvs & " ctvs. (en efectivo) " &
  " en pago de ....., según detalle ..... ."

A nuestro proyecto, así como agregamos formularios vamos a agregar una CLASE, la misma es la siguiente:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
Imports System
 
Public Class NumeroATexto
 
  ' ---------------------------------------------------------------------------
   ' Devuelve la representación textual de un número ENTERO y demuestra la
  ' concisión de su código, gracias a las técnicas de recursión. 
   ' ---------------------------------------------------------------------------
  Public Shared Function NroATexto(ByVal n As Integer) As String
 
    NroATexto = ""
    ' al llamar a esta Función, se pasa el parámetro "n" como Integer, de manera
    ' que si hay centavos, quedan allá, y en aquella función que llama a ésta,
    ' se extraen los centavos con Mid() y se lo agrega a la leyenda.
    Try
 
      Select Case n
        Case 0
          Return "Cero"
        Case 1 To 29
          Dim matriz() As String = {"Uno", "Dos", "Tres", "Cuatro", "Cinco", "Seis", _
            "Siete", "Ocho", "Nueve", "Diez", "Once", "Doce", "Trece", "Catorce", _
            "Quince", "Dieciséis", "Diecisiete", "Dieciocho", "Diecinueve", "Veinte", _
            "Veintiuno", "Veintidós", "Veintitrés", "Veinticuatro", "Veinticinco", _
            "Veintiséis", "Veintisiete", "Veintiocho", "Veintinueve"}
          Return matriz(n - 1)
        Case 30 To 99
          Dim matriz() As String = {"Treinta", "Cuarenta", "Cincuenta", _
            "Sesenta", "Setenta", "Ochenta", "Noventa"}
          If n Mod 10 = 0 Then Return matriz(n \ 10 - 3)
          Return matriz(n \ 10 - 3) & " y " & NroATexto(n Mod 10)
        Case 100
          Return "Cien"
        Case 101 To 999
          Dim matriz() As String = {"Ciento", "Doscientos", "Trescientos", "Cuatrocientos", _
            "Quinientos", "Seiscientos", "Setecientos", "Ochocientos", "Novecientos"}
          If n Mod 100 = 0 Then Return matriz(n \ 100 - 1)
          Return matriz(n \ 100 - 1) & " " & NroATexto(n Mod 100)
        Case 1000 To 1999
          Return "Mil " & NroATexto(n Mod 1000)
        Case 2000 To 999999
          Return NroATexto(n \ 1000) & " Mil " & NroATexto(n Mod 1000)
        Case 1000000 To 1999999
          Return "Un Millón " & NroATexto(n Mod 1000000)
        Case 1000000 To 999999999
          Return NroATexto(n \ 1000000) & " Millones " & NroATexto(n Mod 1000000)
        Case 1000000000 To 1999999999
          Return "Mil Millones " & NroATexto(n Mod 1000000000)
        Case Else
          Return NroATexto(n \ 1000000000) & " Mil Millones " _
            & NroATexto(n Mod 1000000000)
      End Select
    Catch ex As Exception
      MessageBox.Show("Error N° " & Err.Number & NL & ex.Message, "Public Shared Function NroATexto()", MessageBoxButtons.OK, MessageBoxIcon.Error)
    End Try
    ' ---------------------------------------------------------------------------
    ' Mod (Operador, Visual Basic) = Divide dos números y devuelve sólo el resto.
    ' Tipos admitidos: Todos los tipos numéricos, incluidos los tipos de punto 
    ' flotante sin signo y Decimal. (NOTA: Cuando trabaje con números en punto 
    ' flotante, tenga presente que no siempre tienen una representación precisa 
    ' en memoria. Esto podría producir que ciertas operaciones arrojaran resultados 
    ' inesperados, como una comparación de valores y el operador Mod.)
    ' ---------------------------------------------------------------------------
    ' \ (Operador) = Divide dos números y devuelve un resultado de número entero.
    ' ---------------------------------------------------------------------------
    ' / (Operador, Visual Basic) = Divide dos números y devuelve un resultado de 
    ' punto flotante.
    ' ---------------------------------------------------------------------------
    ' La función IEEERemainder devuelve el residuo de una operación de división,
    ' por lo tanto, es similar al operador Mod pero funciona con números de punto
    ' florante. 
    ' ---------------------------------------------------------------------------
  End Function
End Class

Espero te sea de utilidad. Suerte.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Javier

Numeros a Letras en VB Net 2015

Publicado por Javier (34 intervenciones) el 23/02/2016 04:06:07
Muchas gracias por el aporte, es de mucha utilidad
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar