FoxPro/Visual FoxPro - Funcion Dec to STR

 
Vista:
sin imagen de perfil

Funcion Dec to STR

Publicado por DALSOM (612 intervenciones) el 30/05/2011 22:19:58
Hola a todos,

Cree la funcion DecToStr(num) , esta me debe retornar una cadena conteniendo los decimales de un numero, sin la parte entera del numero, solo los numeros del lado derecho del punto.

Pasa que para los numeros, ofrecen los resultados a continuacion. Fijense en los decimales resultantes :

?dectostr(3.3228964) >>> 322896399999999861307742321514524519443511962890625
?dectostr(3.322896) >>> 322896
?dectostr(392.322896) >>> 3228960000000142827047966420650482177734375
?dectostr(392.32289) >>> 32289
?dectostr(3924.32289) >>> 32288999999991574441082775592803955078125

Fijense en la cantidad de digitos de la parte entera, que cuando sube, la cantidad de decimales devueltos correctamente disminuye.

Como le hago para que cuando llegue aproximadamente
al 5to. o 6to decimal, la division no me devuelva un decimal extra?

Corran la funcion, y veran a lo que me refiero. Esta funcion esta pensada para que no importe el numero de decimales que tenga el numero, me devuelva todos los digitos decimales en una cadena. Ya que al llegar al 5to o 6to digito decimal, no me devuelve el valor correcto.
O puede alguien corregirla !!! Gracias :/)


Function DecToStr
parameters num

local dig as int, dec as float, ret as string

dig = int(num)
dec = num - dig
ret = ""

do while (dec > 0.00)
dig = int((dec*10))
ret = ret + alltrim(str(dig))
dec = (dec*10) - dig
enddo
return ret
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Funcion Dec to STR

Publicado por es_binario (757 intervenciones) el 31/05/2011 00:42:26
Yo lo puedo hacer pero unicamente hasta 15 decimales no mas, si te sirve esta es mi función.

?dectostr(3.3228964) --> 3228964
?dectostr(3.322896) --> 322896
?dectostr(392.322896) --> 322896
?dectostr(3924.32289)--> 32289
FUNCTION dectostr(numer as double)
LOCAL quita as Integer, numero_fin as double
numero_fin = numer - (INT(numer))
RETURN RIGHT(ALLTRIM(PADL(numero_fin,15)),(len(ALLTRIM((PADL(numero_fin,15)))) - 2))
ENDFUNC

saludos desde México.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Funcion Dec to STR

Publicado por es_binario (757 intervenciones) el 31/05/2011 00:47:48
en la funcion quita as Integer, sale sobrando la puedes borrar.

en un principio planeaba usan un len, pero no fue necesario lo hice todo en el return, por eso sale sobrando.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Funcion Dec to STR

Publicado por DALSOM (612 intervenciones) el 31/05/2011 01:10:46
Gracias, funciona mucho mejor que la mia.

Aunque la logica es correcta, estoy errado! :)
Kirk - Start Trek

Gracias!!! :)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar