FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour Conversión de cadena a número con VAL
Posts: 610
Joined: Wed Oct 19, 2005 08:20 PM
Conversión de cadena a número con VAL
Posted: Thu Oct 21, 2010 06:37 PM

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 23.07 32 bits, BC++ 7.4, xVerce CW 1.0, PellesC
Posts: 610
Joined: Wed Oct 19, 2005 08:20 PM
Re: Conversión de cadena a número con VAL
Posted: Fri Oct 22, 2010 08:36 AM

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 23.07 32 bits, BC++ 7.4, xVerce CW 1.0, PellesC
Posts: 1364
Joined: Wed Jun 21, 2006 12:39 AM
Re: Conversión de cadena a número con VAL
Posted: Fri Oct 22, 2010 01:19 PM

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.

Posts: 111
Joined: Sat Jan 30, 2010 08:35 AM
Re: Conversión de cadena a número con VAL
Posted: Fri Oct 22, 2010 01:24 PM
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 (fw): Select all Collapse
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
Posts: 610
Joined: Wed Oct 19, 2005 08:20 PM
Re: Conversión de cadena a número con VAL
Posted: Fri Oct 22, 2010 03:27 PM

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 23.07 32 bits, BC++ 7.4, xVerce CW 1.0, PellesC

Continue the discussion