Conversión de cadena a número con VAL

Post Reply
User avatar
Manuel Aranda
Posts: 561
Joined: Wed Oct 19, 2005 8:20 pm
Location: España

Conversión de cadena a número con VAL

Post 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?
Un saludo,
Manuel

xH 1.2.3, FWH 14.09, BC++ 5.8.2, xVerce CW 1.0, PellesC
User avatar
Manuel Aranda
Posts: 561
Joined: Wed Oct 19, 2005 8:20 pm
Location: España

Re: Conversión de cadena a número con VAL

Post 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.
Un saludo,
Manuel

xH 1.2.3, FWH 14.09, BC++ 5.8.2, xVerce CW 1.0, PellesC
horacio
Posts: 1270
Joined: Wed Jun 21, 2006 12:39 am
Location: Capital Federal Argentina

Re: Conversión de cadena a número con VAL

Post 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.
pcordonet
Posts: 110
Joined: Sat Jan 30, 2010 8:35 am
Location: Girona

Re: Conversión de cadena a número con VAL

Post 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
User avatar
Manuel Aranda
Posts: 561
Joined: Wed Oct 19, 2005 8:20 pm
Location: España

Re: Conversión de cadena a número con VAL

Post 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.
Un saludo,
Manuel

xH 1.2.3, FWH 14.09, BC++ 5.8.2, xVerce CW 1.0, PellesC
Post Reply