十进位和其它进位数互换的函数

发表于:2007-06-30来源:作者:点击数: 标签:
好象这两天论坛里有几个都是有关不同进位数之间的互换问题,今天有空就给大家写两个函数出来,希望能抛砖引玉。 这两个函数可以使 [小于36进位的数] 和 [十进位数]相互转换,从而使得[小于36进位数]的不同进位数间实现转换,现将它们写在下面: % @#说明:合
好象这两天论坛里有几个都是有关不同进位数之间的互换问题,今天有空就给大家写两个函数出来,希望能抛砖引玉。
这两个函数可以使 [小于36进位的数] 和 [十进位数]相互转换,从而使得[小于36进位数]的不同进位数间实现转换,现将它们写在下面:

<%
@#说明:合并使用和以转化不同位数之间的转化



@#****************** 转换成十进位函数 ******************

@#--------------说明部分--------------------------------
@#[功能] 小于36进位的数 ---转换成---> 十进位 的函数
@#[说明]
@#Binary 是原数,十进位以上的数一定要是字符串,其它的都可以。
@#H 是原数的进位值。
@#引用 Decimal(Binary,H)

@#--------------函数部分--------------
function Decimal(Binary,H)
@#分解成整数和小数两部分来分别处理
L = Split(Binary,".")
For i = 0 to Ubound(L)
For ii = 1 to Len(L(i))
@#处理整数部分
Power = ii-1
cLen = Len(L(i))-ii+1
@#处理小数部分
If i = 1 then
Power = -ii
cLen = ii
End if
@#取得位数值
Bin = Mid(L(i),cLen,1)
@#处理10进以上进位
if isNumeric(Bin) = False then
Bin = Asc(UCase(Bin))-55
end if
@#逐位幂运算并累加结果
Dec = Dec + Bin*H^(Power)
Next
Next
@#输出最终值
Decimal = Dec
end function



@#--------------例子1--------------------
@#例子1 (二进位转换成十进位):
Num = 1011.01 @#原数
H = 2 @#原来的进位数
Response.Write Decimal(Num,H) @#引用函数
@#输出结果是 11.25 (十进位)

@#--------------例子2--------------------
@#例子2 (十六进位转换成十进位):
Num = "a0.8" @#原数
H = 16 @#原来的进位数
Response.Write Decimal(Num,H) @#引用函数
@#显示结果是 160.5 (十进位)







@#****************** 转换成其它进位 ******************

@#--------------说明--------------------------------
@#[功能:]十进位 ---转换成---> 小于36进位的数 的函数
@#[说明:]
@#Decimal是原数,十进位以上的数是以字符串形式输出。
@#H 是原数的进位值。
@#H2 是转化后的数精确到小数点后几位。
@#引用 Binary(Decimal,H,H2)



@#--------------函数部分----------------------------
function Binary(Decimal,H,H2)
L = Split(Decimal,".")
Z = cInt(L(0))
For i = 0 to Ubound(L)
@#===========处理整数部分==========
IF i = 0 THEN
Z1 = Z
if Z1 < H then
Dec1 = Z
if Z1 > 9 then
Dec1 = Chr(Z1+55)
end if
else
ii = 1
Do While Z1 > 0
X1 = Z1 Mod H
if X1 > 9 then
X1 = Chr(X1+55)
end if
Dec1 = cStr(X1) & Dec1
Z1 = Fix(Z1/H)
ii = ii+1
Loop
end if
@#==========处理小数部分==========
ELSE
Z = Decimal-Z
For ii = 1 to H2
X = Fix(Z*H)
Z = Z*H - X
if X > 9 then
X = Chr(X+55)
end if
Dec2 = Dec2 & cStr(X)
Next
Dec2 = "."& cStr(Dec2)
END IF
Next
Binary = Dec1 & Dec2
end function




@#--------------例子1--------------
@#原数是十进位的160.6640625要转化成十六进位
Numb = 160.6640625 @#原数
H = 16 @#要转化成的进位数
H2 = 2 @#转化后精确到小数点后几位
Response.Write Binary(Numb,H,H2) @#引用函数
@#显示结果是 a0.aa (十六进位)

@#--------------例子2--------------
@#原数是十进位的11.25要转化成二进位
Numb = 11.25 @#原数
H = 2 @#要转化成的进位数
H2 = 2 @#转化后精确到小数点后几位
Response.Write Binary(Numb,H,H2) @#引用函数
@#显示结果是 1011.01 (二进位)
%>

原文转自:http://www.ltesting.net