Page 1 of 1
Conversión de cadena a número con VAL
Posted: Thu Oct 21, 2010 6:37 pm
by Manuel Aranda
Estoy conviertiendo una larga cadena alfanumérica en numérica con VAL y los resultados son desconcertantes ¿Existe un longitud máxima numérica para esta conversión?
Estos son los resultados que obtengo:
cCadena:= "21030903590010003692142800"
msginfo(cCadena) resultado = 21030903590010003692142800
msginfo(val(cCadena)) resultado = 21030903590010000850000000.000000
¿Existe alguna solución para esto?
Re: Conversión de cadena a número con VAL
Posted: Fri Oct 22, 2010 8:36 am
by Manuel Aranda
Me resisto a creer que esto no se pueda hacer en nuestro entorno de programación. El ejemplo práctico es el siguiente: Se trata de calcular los dígitos de control del IBAN de una cuenta bancaria, es decir, dividir por 97 el número 21030903590010003692142800 para sacar el resto.
¿A alguien le ha ocurrido algo parecido? Sería la primera vez que no puedo hacer algo con FWH.
Re: Conversión de cadena a número con VAL
Posted: Fri Oct 22, 2010 1:19 pm
by horacio
Manuel, No tiene nada que ver FWH, es el compilador y aparentemente no es posible. Quizá se pueda hacer una rutina en C que resuelva esta carencia. Saludos.
Re: Conversión de cadena a número con VAL
Posted: Fri Oct 22, 2010 1:24 pm
by pcordonet
Hola, Manuel
Yo me encontre con el mismo problema, al final hice esta función.
Con esta funció conseguí el resto de una division pasandole una cadena de números.
Code: Select all
Function ModString(cString,nDiv)
Local cP1,nPS:= 1,nLS,cP2,cP3
Local cQc:= "",nReste
nLS:= Len(cString)+1
nP1:= Val(Substr(cString,1,1))
nPS++
Do While nPS <= nLS
If nP1 >= nDiv
cQc+= Str( Int(nP1 / nDiv) ,1)
nReste:= Mod(nP1 , nDiv )
Else
cQc+= "0"
nReste:= nP1
EndIf
nP1:= Val( Alltrim(Str(( Int(nReste) ))) + Substr(cString,nPS,1) )
nPS++
Enddo
Return nReste
Espero que te haya ayudado.
Pere
Re: Conversión de cadena a número con VAL
Posted: Fri Oct 22, 2010 3:27 pm
by Manuel Aranda
Horacio gracias. Ciertamente me he expresado mal, FWH nada tiene que ver en esto.
Pere, muchíííísimas gracias, no sólo por verificar el problema, sobre todo por el aporte de la función. Es justamente lo que necesitaba, funciona a la perfección. Te estoy muy agradecido.