Numeros a Letras en VB Net 2015
Publicado por BERNARDO HECTOR (15 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í.
A nuestro proyecto, así como agregamos formularios vamos a agregar una CLASE, la misma es la siguiente:
Espero te sea de utilidad. Suerte.
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


0