Autor Tema: [SOURCE] Función para pasar de Números a Letras  (Leído 17886 veces)

0 Usuarios y 1 Visitante están viendo este tema.

ssccaann43

  • Terabyte
  • *****
  • Mensajes: 970
  • Reputación: +97/-58
    • Ver Perfil
    • Sistemas Nuñez, Consultores y Soporte, C.A.
Re:[SOURCE] Función para pasar de Números a Letras
« Respuesta #15 en: Febrero 22, 2010, 01:55:45 pm »
Código: (vb) [Seleccionar]
                            If B1 Then
                               If D1 = "2" Then DFinal = "DOS"
                               If D1 = "3" Then DFinal = "TRES"
                               DFinal = "VEINTI" & DFinal
                            Else
                               DFinal = "VEINTE" 'solo lo coloque en mayuscula
                            End If

Con eso aparece siempre en mayuscula al igual que el resto...
Miguel Núñez.

erbuson

  • Kilobyte
  • **
  • Mensajes: 75
  • Reputación: +11/-1
    • Ver Perfil
Re:[SOURCE] Funci�n para pasar de N�meros a Letras
« Respuesta #16 en: Febrero 22, 2010, 02:30:52 pm »
Hola, de nuevo, mi comentario fue para que el autor EDITARA su mensaje y lo corrigiera para aquel que después lo utilice. También he corregido el "SETECINETOS " por "SETECIENTOS", igualmente lo comento por si Wolf desea modificarlo.

Saludos

wolf_kof

  • Visitante
Re:[SOURCE] Funci�n para pasar de N�meros a Letras
« Respuesta #17 en: Febrero 22, 2010, 06:43:47 pm »
 Graxias SSCCAANN !!!

Y si el Veinte esta en minusculas, lo deje asi por alguna razon pero ya no recuerdo por que!!!!  :P

Pero esta documentado si los decimales no te sale bien entonces busca en la seccion de los decimales y los centesimos y modificalo a tu gusto

YAcosta

  • Moderador Global
  • Exabyte
  • *****
  • Mensajes: 2853
  • Reputación: +160/-38
  • Daddy de Qüentas y QüeryFull
    • Ver Perfil
    • Personal
Re:[SOURCE] Funci�n para pasar de N�meros a Letras
« Respuesta #18 en: Febrero 23, 2010, 12:54:41 am »
Hola, creo que tiene un pequeño "error" cuando se trata de una cantidad de mil ya que por ejemplo indica:

1254 = un mil doscientos cincuenta y cuatro

Por otra parte es realmente simple, había visto rutinas similares pero el código es mas largo.

Saludos



Pues, quizás lo ves como error... Pero está bien...! Es realmente asi..

1455 = un mil cuatrocientos cincuenta y cinco...

Hasta ahora los cheques impresos por mi software que usan el módulo pues todos han sido procesados sin problemas...! :D

Por otro lado, creo sinceramente que puede mejorarse, no dudo de dicha posibilidad. Si crees que puedas mejorarlo, haslo. Aquí se aceptan mejoras...!  ;D

En lo personal yo estoy totalmente de acuerdo en poner UN MIL. Así lo hago desde hace años. ¿La razón? no estamos hablando de números silvestres cuales quiera, estamos hablando de montos, al poner UN MIL elimino cualquier posibilidad de alteración del documento de que alguien agregue por ejemplo en letras DOS MIL. Claro con alguna artimaña de algún competente estafador tambien podría alterarlo, pero al menos se la hace mucho mas complicado.
Una vez hace un par de años por una historia larga que no voy a contar, un cliente mio en un contrato le alteraron el monto, era de algo asi como 1,250 Nuevos Soles (Peru) y en letras: MIL DOSCIENTOS CINCUENTA NUEVOS SOLES.
Lamentablemente al estar hecho a mano entre el 1 y la coma había un ligero espacio y cambiaron por 10,250 y en letras fácil DIEZ MIL DOSCIENTOS CINCUENTA NUEVOS SOLES. Afortunadamente la estafa no se concreto pero retraso mucho el tramite que de haber puesto 1,250 y en letras UN MIL DOSC... no hubiera perdido tiempo alguno.
Insisto es una sugerencia, no pretendo crear polémica

A y ademas acá en Perú tampoco decimos UN MIL algo, decimos MIL pero en documentos con montos escribimos UN MIL.

Buena ssccaann43
« última modificación: Febrero 23, 2010, 12:58:42 am por YvanB »
Me encuentras en YAcosta.com

wolf_kof

  • Visitante
Re:[SOURCE] Función para pasar de Números a Letras
« Respuesta #19 en: Febrero 23, 2010, 02:38:58 am »
No tengo problemas en el UN MIL y en el MIL pero si haces lo siguiente:

SON: MIL DOSCIENTOS CINCUENTA QUETZALES CON SETENTA Y CINCO CENTAVOS

creo que hay no hay forma de que te cometan fraude con algun documento

y si por parte es un cheque, yo lo que hago con mis clientes es configurar el reporte para que cuando pida la cifra se imprima pegado ejemplo

CANTIDAD EN NUMEROS: Q. 1250.00

CANTIDAD EN LETRAS: MIL DOSCIENTOS CINCUENTA QUETZALES EXACTOS

y pues asi lo he solucionado de tal manera que el cheque se mira mas estetico y no se puede plagiar. en cuanto a las correciones, bueno graxias no las habia notado ya corregi el del VEINTE pero no habia visto el de SETECIENTOS

Graxias lo corrigo y lo modifico  :P

FrankLizardo

  • Kilobyte
  • **
  • Mensajes: 65
  • Reputación: +7/-1
    • Ver Perfil
Re:[SOURCE] Función para pasar de Números a Letras
« Respuesta #20 en: Febrero 27, 2010, 08:19:14 pm »
Bueno Yo Utilizo esta Funcion

Esto va en un modulo

Código: [Seleccionar]
Dim Numeros(103) As String
Function Centenas(VCentena As Double) As String
If VCentena = 1 Then
   Centenas = Numeros(100)
Else
   If VCentena = 5 Then
      Centenas = Numeros(101)
      Else
         If VCentena = 7 Then
            Centenas = letras & Numeros(102)
         Else
            If VCentena = 9 Then
               Centenas = letras & Numeros(103)
            Else
               Centenas = Numeros(VCentena)
            End If
         End If
   End If
End If
End Function
Function Unidades(VUnidad As Double) As String
   Unidades = Numeros(VUnidad)
End Function
Function Decenas(VDecena As Double) As String
   Decenas = Numeros(VDecena)
End Function
Sub inicializar()
   Numeros(0) = "CERO"
   Numeros(1) = "UNO"
   Numeros(2) = "DOS"
   Numeros(3) = "TRES"
   Numeros(4) = "CUATRO"
   Numeros(5) = "CINCO"
   Numeros(6) = "SEIS"
   Numeros(7) = "SIETE"
   Numeros(8) = "OCHO"
   Numeros(9) = "NUEVE"
   Numeros(10) = "DIEZ"
   Numeros(11) = "ONCE"
   Numeros(12) = "DOCE"
   Numeros(13) = "TRECE"
   Numeros(14) = "CATORCE"
   Numeros(15) = "QUINCE"
   Numeros(20) = "VEINTE"
   Numeros(30) = "TREINTA"
   Numeros(40) = "CUARENTA"
   Numeros(50) = "CINCUENTA"
   Numeros(60) = "SESENTA"
   Numeros(70) = "SETENTA"
   Numeros(80) = "OCHENTA"
   Numeros(90) = "NOVENTA"
   Numeros(100) = "CIENTO"
   Numeros(101) = "QUINIENTOS"
   Numeros(102) = "SETECIENTOS"
   Numeros(103) = "NOVECIENTOS"
End Sub
Function NumerosALetras(Numero As Double, Valor2 As Boolean) As String
Dim letras As String
Dim HuboCentavos As Boolean
Dim Decimales As Double

Decimales = Numero - Int(Numero)
Numero = Int(Numero)
inicializar

letras = ""
Do
   '*---> Validación si se pasa de 100 millones
   If Numero >= 1000000000 Then
      letras = "Error en Conversión a Letras"
      Numero = 0
      Decimales = 0
   End If
   
   '*---> Centenas de Millón
   If (Numero < 1000000000) And (Numero >= 100000000) Then
      If (Int(Numero / 100000000) = 1) And ((Numero - (Int(Numero / 100000000) * 100000000)) < 1000000) Then
         letras = letras & "CIEN MILLONES "
      Else
         letras = letras & Centenas(Int(Numero / 100000000))
         If (Int(Numero / 100000000) <> 1) And (Int(Numero / 100000000) <> 5) And (Int(Numero / 100000000) <> 7) And (Int(Numero / 100000000) <> 9) Then
            letras = letras & "CIENTOS "
         Else
            letras = letras & " "
         End If
      End If
      Numero = Numero - (Int(Numero / 100000000) * 100000000)
   End If
   
   '*---> Decenas de Millón
   If (Numero < 100000000) And (Numero >= 10000000) Then
      If Int(Numero / 1000000) < 16 Then
         letras = letras & Decenas(Int(Numero / 1000000))
         letras = letras & " MILLONES "
         Numero = Numero - (Int(Numero / 1000000) * 1000000)
      Else
         letras = letras & Decenas(Int(Numero / 10000000) * 10)
         Numero = Numero - (Int(Numero / 10000000) * 10000000)
         If Numero > 1000000 Then
            letras = letras & " y "
         End If
      End If
   End If
   
   '*---> Unidades de Millón
   If (Numero < 10000000) And (Numero >= 1000000) Then
      If Int(Numero / 1000000) = 1 Then
         letras = letras & " UN MILLÓN "
      Else
         letras = letras & Unidades(Int(Numero / 1000000))
         letras = letras & " MILLONES "
      End If
      Numero = Numero - (Int(Numero / 1000000) * 1000000)
   End If
   
   '*---> Centenas de Millar
   If (Numero < 1000000) And (Numero >= 100000) Then
      If (Int(Numero / 100000) = 1) And ((Numero - (Int(Numero / 100000) * 100000)) < 1000) Then
         letras = letras & "CIEN MIL "
      Else
         letras = letras & Centenas(Int(Numero / 100000))
         If (Int(Numero / 100000) <> 1) And (Int(Numero / 100000) <> 5) And (Int(Numero / 100000) <> 7) And (Int(Numero / 100000) <> 9) Then
            letras = letras & "CIENTOS "
         Else
            letras = letras & " "
         End If
      End If
      Numero = Numero - (Int(Numero / 100000) * 100000)
   End If
   
   '*---> Decenas de Millar
   If (Numero < 100000) And (Numero >= 10000) Then
      If Int(Numero / 1000) < 16 Then
         letras = letras & Decenas(Int(Numero / 1000))
         letras = letras & " MIL "
         Numero = Numero - (Int(Numero / 1000) * 1000)
      Else
         letras = letras & Decenas(Int(Numero / 10000) * 10)
         Numero = Numero - (Int((Numero / 10000)) * 10000)
         If Numero > 1000 Then
            letras = letras & " y "
         Else
            letras = letras & " MIL "
         End If
      End If
   End If
   
   '*---> Unidades de Millar
   If (Numero < 10000) And (Numero >= 1000) Then
      If Int(Numero / 1000) = 1 Then
      '' AQUI DECIA letras = letras & "un"
         letras = letras & ""
      Else
         letras = letras & Unidades(Int(Numero / 1000))
      End If
      letras = letras & " MIL "
      Numero = Numero - (Int(Numero / 1000) * 1000)
   End If
   
   '*---> Centenas
   If (Numero < 1000) And (Numero > 99) Then
      If (Int(Numero / 100) = 1) And ((Numero - (Int(Numero / 100) * 100)) < 1) Then
         letras = letras & "CIEN "
      Else
         letras = letras & Centenas(Int(Numero / 100))
         If (Int(Numero / 100) <> 1) And (Int(Numero / 100) <> 5) And (Int(Numero / 100) <> 7) And (Int(Numero / 100) <> 9) Then
            letras = letras & "CIENTOS "
         Else
            letras = letras & " "
         End If
      End If
      Numero = Numero - (Int(Numero / 100) * 100)
     
   End If
   
    '*---> Decenas
   If (Numero < 100) And (Numero > 9) Then
      If Numero < 16 Then
         letras = letras & Decenas(Int(Numero))
         Numero = Numero - Int(Numero)
      Else
         letras = letras & Decenas(Int((Numero / 10)) * 10)
         Numero = Numero - (Int((Numero / 10)) * 10)
         If Numero > 0.99 Then
            letras = letras & " y "
         End If
      End If
End If
   
   '*---> Unidades
   If (Numero < 10) And (Numero > 0.99) Then
      letras = letras & Unidades(Int(Numero))
      Numero = Numero - Int(Numero)
   End If
Loop Until (Numero = 0)

'*---> Decimales
If (Decimales > 0) Then
    letras = letras & " con "
    letras = letras & Format(Decimales * 100, "00") & "/100"
'Else
'    If (letras <> "Error en Conversión a Letras") And (Len(Trim(letras)) > 0) Then
'    Select Case Valor1
'    Case True
'       letras = letras & " exactos"
'    End Select
'    End If
End If
NumerosALetras = letras
Select Case Valor2
Case True
NumerosALetras = UCase(Left(letras, 1)) & Right(letras, Len(letras) - 1)
End Select
End Function




y Esto en el Form

Código: [Seleccionar]
    Text2.Text = NumerosALetras(Val(Text1.Text), True) & " Nuevos Soles"
Donde text1 va el numero que va Convertir a letra

text2 es el resultado

YAcosta

  • Moderador Global
  • Exabyte
  • *****
  • Mensajes: 2853
  • Reputación: +160/-38
  • Daddy de Qüentas y QüeryFull
    • Ver Perfil
    • Personal
Re:[SOURCE] Funci�n para pasar de N�meros a Letras
« Respuesta #21 en: Febrero 28, 2010, 04:01:44 am »
Interesante, pero tiene un bugsillo, por ejemplo, si pones el numero:

121000 el código entrega el texto:
CIENTO VEINTE MIL  MIL  Nuevos Soles

101000 el código entrega el texto:
CIENTO  MIL  Nuevos Soles

Me permitiría hacerle una modificación aun sin mucho estudio pero podemos ir evaluando.
En la parte de las unidades de millar comentaste el odiado "un", cambie el código de esto:

   '*---> Unidades de Millar
   If (Numero < 10000) And (Numero >= 1000) Then
      If Int(Numero / 1000) = 1 Then
      '' AQUI DECIA letras = letras & "un"
         letras = letras & ""
      Else
         letras = letras & Unidades(Int(Numero / 1000))
      End If
      letras = letras & " MIL "
      Numero = Numero - (Int(Numero / 1000) * 1000)
   End If

a esto:
   '*---> Unidades de Millar
   If (Numero < 10000) And (Numero >= 1000) Then
      If Int(Numero / 1000) = 1 Then
      '' AQUI DECIA letras = letras & "un"
         If Right(letras, 4) = "MIL " Then
            letras = Mid(letras, 1, Len(letras) - 5) & " UN " ' letras & ""
         Else
            If Len(letras) > 0 Then letras = letras & "UN " ' letras & ""
         End If
      Else
         letras = letras & Unidades(Int(Numero / 1000))
      End If
      letras = letras & " MIL "
      Numero = Numero - (Int(Numero / 1000) * 1000)
   End If

y este código entrara lo siguiente (pueden probarlo)
101000:  CIENTO  UN  MIL  Nuevos Soles
121000:  CIENTO VEINTE UN  MIL  Nuevos Soles

Incluso para mis amigos que no les gusta el "UN MIL" al inicio, el numero:
1000 nos dará:  MIL  Nuevos Soles
1250 nos dará:  MIL DOSCIENTOS CINCUENTA Nuevos Soles

Espero sirva. Saludos

y para mis amigos que odia el UN MIL solo habría que validar
Me encuentras en YAcosta.com

wolf_kof

  • Visitante
Re:[SOURCE] Funci�n para pasar de N�meros a Letras
« Respuesta #22 en: Febrero 28, 2010, 02:30:36 pm »
Hay varios ejemplos de codigo para convertir Monedas a Letras, pero no creen que si es hora de hacer una sección para que todo esto tenga un acceso mas rapido!!!!! ???