好象這兩天論壇里有幾個都是有關不同進位數之間的互換問題,今天有空就給大家寫兩個函數出來,希望能拋磚引玉。 這兩個函數可以使 [小于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 (二進位) %>
|