**************************************** *-- 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.