
在按鈕事件里寫
//sValue 就是被轉換的值 sFormat 就是被轉換的值的取值范圍如16進制就是0123456789ABCDEF iCarry 就是進制
iDecimal:=CarryToDecimal(sValue,sFormat,iCarry);
lbDecRet.caption:=IntToStr(iDecimal);
function CarryToDecimal(sSeqOfCarry,sFormat: string; iCarry: Integer): Integer;
var
i,j,iLenth,k1,k2,x: integer;
cc: char;
begin
sSeqOfCarry:=Trim(sSeqOfCarry); //需要被轉成十進制的值X
k2 := iCarry; //X 的進制
if (sSeqOfCarry ='') then //居然是空的,十進制就是0
begin
Result:=0;
Exit;
end;
iLenth := length(sSeqOfCarry); //X的長度
j := iLenth;
x := 0;
repeat //思路:從X第低位到高位逐個取對應的值Y,找出Y的十進制是多少,確定Y要累乘進制多少次,然后累加
cc := sSeqOfCarry[j]; //變數j的作用就是從低位到高位取值用的。
k1 := pos(cc, sFormat)-1; //找出X當前位Y對應的十進制是多少 利用POS函式再減去1,sForamt 就是原始值的取值范圍
for i := 1 to iLenth-j-1 do //確定Y要被累乘多少次
begin //iLength 就是X的長度 j就是當前位的索引 長度減去索引再減去1 就是累乘的次數
k2 := k2 * iCarry;
end;
if j = iLenth then //Y的索引和長度一樣的時候取的肯定是最低位這個時候不需要累乘了,直接加就可以了
x := x + k1
else //累乘后把前面若干位求出的十進制累加
x := x + k1 * k2;
Dec(j);
until j=0;
Result := x;
end;
uj5u.com熱心網友回復:
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/32581.html
標籤:語言基礎/算法/系統設計
上一篇:下拉框從屬關系
