日期:2008-11-24  浏览次数:20962 次

好象这两天论坛里有几个都是有关不同进位数之间的互换问题,今天有空就给大家写两个函数出来,希望能抛砖引玉。
这两个函数可以使 [小于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 (二进位)
%>