Visual Basic.NET - Como escribir una cantidad con letras

 
Vista:
Imágen de perfil de Sam
Val: 37
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Como escribir una cantidad con letras

Publicado por Sam (18 intervenciones) el 01/03/2020 17:32:37
Hola amigos
Estoy buscando como escribir una cantidad a pagar en letras.
Si alguien tiene una idea de algoritmo ...
Gracias de antemano.
Sam
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 Phil Rob
Val: 3.353
Oro
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Como escribir una cantidad con letras

Publicado por Phil Rob (1561 intervenciones) el 02/03/2020 17:22:52
Hola Sam,

Buscas un programa para escribir los montos en letras...

La pregunta has venido en un foro francés para un señor de Túnez. Me acordé de un algoritmo que he escrito en Cobol en 1985 y lo rescribí en VB.Net, en francés y en español, para escribir los montos en francés, en español y en inglés.

Veo que vives en Francia y este muy bien si quieres el programa para escribir los montos en francés: la gramática francesa es correcta. Para escribir los montos en español y en inglés, la corrección de la gramática es aproximada, el algoritmo debe ser ajustar un poco.

Miras el video: https://www.dropbox.com/s/xfgbjk2wrudwxv0/NombresEnLettres.mp4?dl=0

Adjunto todo el proyecto, tienes que leer todos comentarios.




PesosArgentin
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
Imágen de perfil de Sam
Val: 37
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Como escribir una cantidad con letras

Publicado por Sam (18 intervenciones) el 02/03/2020 18:09:00
Muchas gracias.
Miraré pronto.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Sam
Val: 37
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Como escribir una cantidad con letras

Publicado por Sam (18 intervenciones) el 02/03/2020 20:32:25
Hola Phil,
Tu código es perfecto para mi escribir los montos en francés. Este es exactamente el código que me faltaba. Voy poner tu algoritmo en me programa.
Para escribir en español o en inglés, tu algoritmo es fácil a cambiar pero no este es necesario para mí.
Muchas gracias Phil.
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
Imágen de perfil de BERNARDO HECTOR
Val: 31
Ha aumentado su posición en 3 puestos en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Como escribir una cantidad con letras

Publicado por BERNARDO HECTOR (15 intervenciones) el 22/03/2020 11:56:15
Hola. Por si te es útil, en Visual Studio Community 2017. Te paso una Clase, a la cual hace referencia el procedimiento que imprimirá en números y en letras. La clase 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
75
76
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

Puedes copias esta clase TAL CUAL.

Luego, en tu formulario, llamas a la clase de la siguiente manera:

1
2
3
4
5
6
7
8
9
10
11
12
' En una variable -> dlImport = 420.33 por ejemplo, le adjuticas este valor
Dim sCtvs As String = "00"
Dim iComa As Integer = InStr(1, CType(CDbl(dlImport.ToString("N2")), String), ".", vbBinaryCompare) ' extraigo la coma
If iComa > 0 Then
    sCtvs = Mid(CDbl(dlImport).ToString("N2"), iComa + 1) ' separo los centavos
End If
Dim sEntero As String = CStr(dlImport)
'-----------------------------------------------------------------------------------
' Al ponerlo en "Cint()" <más abajo> aunque el importe tenga centavos, me toma solamente el Entero que es lo que necesito
'-----------------------------------------------------------------------------------
Me.lsMsje = "Recibimos de " & sApellido & " la suma de: Pesos " & UCase(NumeroATexto.NroATexto(CInt(sEntero))) &
    " c/" & sCtvs & " ctvs. (en efectivo) " & " en pago de ...."

Espero te sea de utilidad.
Bernardo
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
Imágen de perfil de Sam
Val: 37
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Como escribir una cantidad con letras

Publicado por Sam (18 intervenciones) el 22/03/2020 16:25:27
Hola Bernardo,

La versión de Phil Rob es multilingüe y me satisface para el francés.
Tu versión es muy bien también. La tomo para otra aplicación.

Muchas gracias.

Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar