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.