当S:=23.5678时,I:=TRUNC(STRTOFLOAT(S))的结果不等于235678,却等于235677是怎么回事?代码如下:procedure TForm1.Button1Click(Sender: TObject);
VAR
I:INTEGER;
S:STRING;
begin
I:=0;
S:='23.5678';
I:=TRUNC(STRTOFLOAT(S)*10000);
end;另如果让S:='23.56781'时 I:=TRUNC(STRTOFLOAT(S)*10000);得到的结果是235678
VAR
I:INTEGER;
S:STRING;
begin
I:=0;
S:='23.5678';
I:=TRUNC(STRTOFLOAT(S)*10000);
end;另如果让S:='23.56781'时 I:=TRUNC(STRTOFLOAT(S)*10000);得到的结果是235678
得到的是一个极其近似 23.5678 的值,而Trunc直接去掉了小数部分,就算你直接赋值
x := 23.5678;
结果可能也是一样的。还是用Round比较好。
var
S:string;
I:integer;
K:double;
begin
S:='23.5678';
k:= STRTOFLOAT(S)*10000;
I:=TRUNC(K);
end;
分开写吧,这样就行了。
Trunc 直接截掉小数部份
Round 按照银行家算法“四舍五入”procedure TForm1.Button1Click(Sender: TObject);
var
I:Integer;
S:string;
begin
I:=0;
S:='23.5678';
I:=Round(StrToFloat(S)*10000);
end;
第二种方法:分成多骤完成。procedure TForm1.Button1Click(Sender: TObject);
var
I:Integer;
S:string;
vSingle:Single;
begin
I:=0;
S:='23.5678';
if TryStrToFloat(s,vSingle) then
begin
vSingle := vSingle * 10000;
I:=Trunc(vSingle);
end;
end;