delphi中的常用數學函式 與 十六進位制轉成float
問:程式碼x:=power(y,2);
卻提示這個Undeclared identifier: 'power'
為什麼?
答:引用單元math
delphi中的常用數學函式
定義:function Power(X,Y): (Same type as parameter);
說明:X可以是整型,也可以是實型;返回值實型例子:
var
i:integer;
begin
i := Power(3,4); { 81}
end.
求絕對值函式abs(x)
定義:function Abs(X): (Same type as parameter);
說明:X可以是整型,也可以是實型;返回值和X的型別一致例子:
var
r: Real;
i: Integer;
begin
r := Abs(-2.3); { 2.3 }
i := Abs(-157); { 157 }
end.
取整函式int(x)
定義:function Int(X: Real): Real; 注意:X是實型數,返回值也是實型的;返回的是X的整數部分,也就是說,X被截尾了(而不是四捨五入)例子:
var R: Real;
begin
R := Int(123.567); { 123.0 }
R := Int(-123.456); { -123.0 }
end.
截尾函式trunc(x)
定義:function Trunc(X: Real): Longint; 注意:X是實型表示式. Trunc 返回Longint型的X的整數部分例子:
begin
Writeln(1.4, ' becomes ', Trunc(1.4)); { 1 }
Writeln(1.5, ' becomes ', Trunc(1.5)); { 1 }
Writeln(-1.4, 'becomes ', Trunc(-1.4)); { -1 }
Writeln(-1.5, 'becomes ', Trunc(-1.5)); { -1 }
end.
四捨五入函式round(x)
定義:function Round(X: Real): Longint; 注意:X是實型表示式. Round 返回Longint型的X的四捨五入值.如果返回值超出了Longint的表示範圍,則出錯. 例子:
begin
Writeln(1.4, ' rounds to ', Round(1.4)); { 1 }
Writeln(1.5, ' rounds to ', Round(1.5)); { 2 }
Writeln(-1.4, 'rounds to ', Round(-1.4));{ -1 }
Writeln(-1.5, 'rounds to ', Round(-1.5));{ -2 }
end.
取小數函式frac(x)
定義:function Frac(X: Real): Real; 注意:X 是實型表示式. 結果返回 X 的小數部分; 也就是說,Frac(X) = X - Int(_X). 例子:
var
R: Real;
begin
R := Frac(123.456); { 0.456 }
R := Frac(-123.456); { -0.456 }
end.
求平方根函式sqrt(x)和平方函式sqr(x)
定義:
平方根:function Sqrt(X: Real): Real;
注意:X 是實型表示式. 返回實型的X的平方根. 平方:function Sqr(X): (Same type as parameter);
注意:X 是實型或整型表示式.返回值的型別和X的型別一致,大小是X的平方,即X*X.
例子:
begin
Writeln('5 squared is ', Sqr(5)); { 25 }
Writeln('The square root of 2 is ',Sqrt(2.0)); { 1.414 }
Pascal函式例項
標準資料型別的含義及符號
(1)整型數的取值範圍:-32768<=n<=32768;整型運算操作:+、-、*、div、mod;整型關係操作:=、<>、>=、<=,結果為布林型;有關整型的標準函式:
整型函式
函式名 函式值 例
前接函式 pred(x) x-1 pred(4)=3
後繼函式 succ(x) x+1 succ(-3)=-2
絕對值函式abs(x) |x| abs(-1)=1
平方函式sqr(x) x^2 sqr(-5)=25
奇函式 odd(x) x為奇數時值為True odd(1)=true
x為偶數時值為False odd(16)=false
字元函式chr(x) 序號為x的ASCII字元 chr(65)=\'\'a\'\'
a對應的序號65
(2)實型數的絕對值取值範圍:1E-38~1E+38;計算機實數的表示標準形式往往類如1.2E-8,-1234.56E+3等形式;實數範圍比整數大,但實型數的運算速度比整形數慢,另外實型數在儲存時會出現小的誤差;
實型的運算操作:+、-、*、/。只要有一個運算物件是實型量,其運算結果總是實型量,即其可與整型量混合計算。
實型的關係操作;=、<>、>=、<=,結果為布林型,即兩種結果:true或false。
實型函式種類:
abs(x);
sqr(x);
sin(x)正弦函式,求數學三角正弦函式的值,如sin(1.570789)=0.99999,注意X值要以弧度作單位;
cos(x)餘弦函式;
arctan(x)反正切函式;
ln(x)自然對數;
exp(x)指數函式;求ex的值。
Sqrt(x)平方根函式;如sqrt(1.44)=1.2
trunc(x)截尾函式;截去實數x的小數部分,保留整數,例:trunc(-3.3)=-3;
round(x)舍入函式;將實數x四捨五入得到最接近的整數,例;round(3.3)=3,round(-8.9)=-9;
注意:實型資料沒有pred和succ函式。
(3)布林型資料的值只有兩個:false和true,前者序號為0,後者序號為1。布林型別資料最少,但用途廣泛,主要用於程式設計中的流程控制和邏輯判斷。
布林型資料可作如下運算操作:
not(邏輯非),and(邏輯與),or(邏輯與)。
布林型的標準函式:
ORD(X) 序號函式,例:ORD(FALSE)=0,ORD(TRUE)=1;
RRED(X) 前趨函式,例:PRED(TRUE)=FALSE,但X的值為TRUE時,只有前接值,沒有後趨值;
SUCC(X)後繼函式,例:SUCC(FALSE)=TRUE,但X的值為FALSE時,只有後繼值,沒有前趨值;
EOF(X)和EOLN(X)檔案結束函式,行結束函式,此處不予以討論。
(4)字元型資料取值範圍:ASCⅡ碼錶中的一部分,包含幾十個大小寫英文字母與數字及數字、各種符號(含空格),注意每個字元符號均有相應的序號,而序號可視為整型數,所以字元型與整型是可以轉換的。
在PASCAL程式中,用單引號括起來的一個字元表視字元型資料,如\'\'A\'\',\'\'8\'\',\'\'+\'\',\'\' \'\',分別表示字母A,數字8,字元+和空格。注意整型或實型的8與字元型的8是有本質的區別的。
字元型資料不可直接進行運算操作+、-、*、/;
字元型資料可做如下關係操作:>,<,=,<>,<=,>=,運算結果是布林型別的值,即TRUE或FALSE。
字元性的標準函式:
ORD(x) 求X的序號,例如:ORD(\'\'C\'\')=67;ORD(\'\'0\'\')=48;ORD(\'\'A\'\')=65;
ORD(\'\'A\'\')=97;
PRED(X) 求X的前接值,例如:PRED(\'\'6\'\')=\'\'5\'\';
SUCC(X) 求X的後續值,例如:SUCC(\'\'6\'\')=\'\'7\'\'
CHR(X) 求序號為X的相應自負,是ORD的逆函式,例如:CHR(67)=\'\'C\'\';
CHR(ORD(\'\'X\'\')-1);
例如如下關係也成立;
ORD(\'\'9\'\')-ORD(\'\'1\'\')=57-49=8;
SUCC(X)=CHR(ORD(X)+1);如SUCC(\'\'B\'\')=CHR(ORD(\'\'B\'\')+1)=CHR(66+1)-C\'\';
PRED(X)=CHR(ORD(X)-1);如PRED( \'\'B\'\')=CHR(ORD(\'\'B\'\')-1)=CHR(66-1)=\'\'A\'\'
示例程式:
{字串轉換成16進位制字串} function StrToHexStr(const S:string):string;//字串轉換成16進位制字串 var I:Integer; begin for I:=1 to Length(S) do begin if I=1 then Result:=IntToHex(Ord(S[1]),2) else Result:=Result+' '+IntToHex(Ord(S[I]),2); end; end; {十進位制 to 二進位制} function IntToBin(Value: LongInt;Size: Integer): String; var i: Integer; begin Result:=''; for i:=Size-1 downto 0 do begin if Value and (1 shl i)<>0 then begin Result:=Result+'1'; end else begin Result:=Result+'0'; end; end; end; {二進位制 to 十進位制} function BintoInt(Value: String): LongInt; var i,Size: Integer; begin Result:=0; Size:=Length(Value); for i:=Size downto 1 do begin if Copy(Value,i,1)='1' then Result:=Result+(1 shl (Size-i)); end; end; function floatBintoInt(Value: String): real; var i,Size: Integer; begin Result:=0; Size:=Length(Value); for i:=Size downto 1 do begin if Copy(Value,i,1)='1' then Result:=Result+1/(1 shl i); end; end; {十六進位制 to 二進位制} function HextoBinary(Hex:string):string; const BOX: array [0..15] of string = ('0000','0001','0010','0011', '0100','0101','0110','0111', '1000','1001','1010','1011', '1100','1101','1110','1111'); var i:integer; begin for i:=Length(Hex) downto 1 do Result:=BOX[StrToInt('$'+Hex[i])]+Result; end; {十六進位制 to 十進位制 浮點型} function HextoFloat(s:string):real; var b,temp:string; e:integer; f:real; begin b:=HextoBinary(s); temp := copy(b,2,8); e:=BintoInt(temp)-127; temp := copy(b,10,23); f := 1+floatBintoInt(temp); if(copy(b,1,1)='0')then result := power(2,e)*f //------------------------------------------------要引用單元math else result :=-power(2,e)*f; end;
eg:十六進位制浮點數如C1480000,轉成十成制數-12.5
-Hexadecimal floating-point numbers, such as C1480000, turn into Kazunari system for a few-12.5
delphi val()
在這裡Val和iif都是你所用的資料庫中的函式在delphi中Val是一個將字串轉換為數字的函式,
Val(S; var V; var Code: Integer)第一個引數是要轉換的字串,第二個引數存放轉換後的數字,可以是整數或浮點數,第三個引數存放出錯的字元索引值,例如:
Var
V, Code: Integer;
begin
Val('123.445',V,Code);
end;
轉換後: V = 123, Code = 4,表示字串'123.445'轉換為整數是123,在字串第4位轉換出錯