Hola,
quiero dotar a mi app de la posibilidad de leer con voz un numero de telefono pero para eso debo transformarlo en palabras.
Ejemplo tengo el num. 423925 y el usuario presiona el botón Leer y el sistema debería decir:
El número seleccionado es ... cuarenta y dos treinta y nueve veinticinco.
He estado buscando y no encontré un hilo como para seguir .
Yo aporto un Codigo que me adapté de Visual Basic pero no me funciona
Gracias gente!
quiero dotar a mi app de la posibilidad de leer con voz un numero de telefono pero para eso debo transformarlo en palabras.
Ejemplo tengo el num. 423925 y el usuario presiona el botón Leer y el sistema debería decir:
El número seleccionado es ... cuarenta y dos treinta y nueve veinticinco.
He estado buscando y no encontré un hilo como para seguir .
Yo aporto un Codigo que me adapté de Visual Basic pero no me funciona
B4X:
Sub EnLetras(mynumero As String) As String
Dim b As Int, paso As Int
Dim expresion, entero, deci, flag As String
Dim numero As Int
Dim Digitos As Int
Dim tmpEnletras As String
Digitos=mynumero.Length
numero=mynumero
flag = "N"
For paso = 1 To Digitos
If Mid(numero, paso, 1) = "." Then
flag = "S"
Else
If flag = "N" Then
entero = entero + Mid(numero, paso, 1) 'Extae la parte entera del numero
Else
deci = deci + Mid(numero, paso, 1) 'Extrae la parte decimal del numero
End If
End If
Next
If deci.Length = 1 Then
deci = deci & "0"
End If
flag = "N"
If numero >= -999999999 And numero <= 999999999 Then 'si el numero esta dentro de 0 a 999.999.999
For paso = Digitos To 1 Step -1
b = entero.Length - (paso - 1)
Select Case paso
Case 3, 6, 9
Select Case Mid(entero, b, 1)
Case "1"
If Mid(entero, b + 1, 1) = "0" And Mid(entero, b + 2, 1) = "0" Then
expresion = expresion & "cien "
Else
expresion = expresion & "ciento "
End If
Case "2"
expresion = expresion & "doscientos "
Case "3"
expresion = expresion & "trescientos "
Case "4"
expresion = expresion & "cuatrocientos "
Case "5"
expresion = expresion & "quinientos "
Case "6"
expresion = expresion & "seiscientos "
Case "7"
expresion = expresion & "setecientos "
Case "8"
expresion = expresion & "ochocientos "
Case "9"
expresion = expresion & "novecientos "
End Select
Case 2, 5, 8
Select Case Mid(entero, b, 1)
Case "1"
If Mid(entero, b + 1, 1) = "0" Then
flag = "S"
expresion = expresion & "diez "
End If
If Mid(entero, b + 1, 1) = "1" Then
flag = "S"
expresion = expresion & "once "
End If
If Mid(entero, b + 1, 1) = "2" Then
flag = "S"
expresion = expresion & "doce "
End If
If Mid(entero, b + 1, 1) = "3" Then
flag = "S"
expresion = expresion & "trece "
End If
If Mid(entero, b + 1, 1) = "4" Then
flag = "S"
expresion = expresion & "catorce "
End If
If Mid(entero, b + 1, 1) = "5" Then
flag = "S"
expresion = expresion & "quince "
End If
If Mid(entero, b + 1, 1) > "5" Then
flag = "N"
expresion = expresion & "dieci"
End If
Case "2"
If Mid(entero, b + 1, 1) = "0" Then
expresion = expresion & "veinte "
flag = "S"
Else
expresion = expresion & "veinti"
flag = "N"
End If
Case "3"
If Mid(entero, b + 1, 1) = "0" Then
expresion = expresion & "treinta "
flag = "S"
Else
expresion = expresion & "treinta y "
flag = "N"
End If
Case "4"
If Mid(entero, b + 1, 1) = "0" Then
expresion = expresion & "cuarenta "
flag = "S"
Else
expresion = expresion & "cuarenta y "
flag = "N"
End If
Case "5"
If Mid(entero, b + 1, 1) = "0" Then
expresion = expresion & "cincuenta "
flag = "S"
Else
expresion = expresion & "cincuenta y "
flag = "N"
End If
Case "6"
If Mid(entero, b + 1, 1) = "0" Then
expresion = expresion & "sesenta "
flag = "S"
Else
expresion = expresion & "sesenta y "
flag = "N"
End If
Case "7"
If Mid(entero, b + 1, 1) = "0" Then
expresion = expresion & "setenta "
flag = "S"
Else
expresion = expresion & "setenta y "
flag = "N"
End If
Case "8"
If Mid(entero, b + 1, 1) = "0" Then
expresion = expresion & "ochenta "
flag = "S"
Else
expresion = expresion & "ochenta y "
flag = "N"
End If
Case "9"
If Mid(entero, b + 1, 1) = "0" Then
expresion = expresion & "noventa "
flag = "S"
Else
expresion = expresion & "noventa y "
flag = "N"
End If
End Select
Case 1, 4, 7
Select Case Mid(entero, b, 1)
Case "1"
If flag = "N" Then
If paso = 1 Then
expresion = expresion & "uno "
Else
expresion = expresion & "un "
End If
End If
Case "2"
If flag = "N" Then
expresion = expresion & "dos "
End If
Case "3"
If flag = "N" Then
expresion = expresion & "tres "
End If
Case "4"
If flag = "N" Then
expresion = expresion & "cuatro "
End If
Case "5"
If flag = "N" Then
expresion = expresion & "cinco "
End If
Case "6"
If flag = "N" Then
expresion = expresion & "seis "
End If
Case "7"
If flag = "N" Then
expresion = expresion & "siete "
End If
Case "8"
If flag = "N" Then
expresion = expresion & "ocho "
End If
Case "9"
If flag = "N" Then
expresion = expresion & "nueve "
End If
End Select
End Select
If paso = 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 _
entero.Length <= 6) Then
expresion = expresion & "mil "
End If
End If
If paso = 7 Then
If Digitos = 7 And Mid(entero, 1, 1) = "1" Then
expresion = expresion & "millón "
Else
expresion = expresion & "millones "
End If
End If
Next
If deci <> "" Then
If Mid(entero, 1, 1) = "-" Then 'si el numero es negativo
tmpEnletras ="menos " & expresion & "con " & deci ' & "/100"
Else
tmpEnletras = expresion & "con " & deci ' & "/100"
End If
Else
If Mid(entero, 1, 1) = "-" Then 'si el numero es negativo
tmpEnletras = "menos " & expresion
Else
tmpEnletras = expresion
End If
End If
Else 'si el numero a convertir esta fuera del rango superior e inferior
tmpEnletras = ""
End If
Return tmpEnletras.SubString (1)
End Sub
Gracias gente!
Last edited: