****************************************
*-- Conversión de números reales a binario
*-- Autor: Lic. Ramón Rodríguez Martínez
*-- País de procedencia México
*-- Forma de uso: X=FloatToBinary(nReal)
*-- Ejemplo: X=FloatToBinary(13.6876)
*-- Datestamp:17/12/2002
*-- Comentario:
*-- Los valores reprentativos son
*-- R(10Em)+R(10Em-1)+R(10Em-2)+..+R(10E0)+.+D(10E-1)+D(10E-2)..+D(10E-M)
*****************************************
CLEAR
?FloatToBinary(13.6875)
FUNCTION FloatToBinary(nValue)
LOCAL pEntera, pDecimal
*-- Tomamos primero la parte entera de la cantidad
pEntera=INT(nValue)
*-- Tomamos por separado la parte decimal
pDecimal=ALLT(STR(nValue-pEntera,20,10)) &&margen de decimal
*-- Y lo convierto a entero
pDecimal=VAL(SUBSTR(pDecimal,AT('.',pDecimal)+1))
*-- Finalmente regreso la cadena convertida a binario
RETURN DecBin(pEntera)+"."+DecBinf(pDecimal)
ENDFUNC
FUNCTION DecBin(nDecimal)
*------------------------------------------------
* Transforma un número decimal a binario
* RETORNA: Caracter
*------------------------------------------------
LOCAL lcBinario, lnResto
lcBinario = ''
DO WHILE nDecimal > 0
lnResto = MOD(nDecimal,2)
nDecimal = INT(nDecimal / 2)
lcBinario = STR(lnResto,1) + lcBinario
ENDDO
RETURN lcBinario
ENDFUNC
FUNCTION DecBinF(nDecimal)
*------------------------------------------------
* Transforma un número decimal a binario
* RETORNA: Caracter
*------------------------------------------------
LOCAL lcBinario, Res
lcBinario = ''
lcDecimal=ALLT(STR(nDecimal))
DO WHILE VAL(lcDecimal)>0
Res=VAL('0.'+lcdecimal)*2
lcBinario=LcBinario+ALLT(STR(INT(Res)))
lcDecimal=ALLT(STR(Res,20,10))
lcDecimal=SUBSTR(lcDecimal,AT('.',lcdecimal)+1)
*-- protegemos para cuando los valores se repiten
*-- y de esta manera evitar un ciclo infinito
*-- en estos casos se toman exclusivamente los primero 4 bits
IF (VAL(lcDecimal)=ndecimal) Then
EXIT
ENDIF
ENDDO
RETURN lcBinario
ENDFUNC
Saludos
Ramón Rodríguez Martínez
No hay comentarios. :
Publicar un comentario
Los comentarios son moderados, por lo que pueden demorar varias horas para su publicación.