1. 程式人生 > >delphi中的常用數學函式 與 十六進位制轉成float

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位轉換出錯