两个float相减得结果为什么不对呀? (10分)

  • 主题发起人 主题发起人 tt123tt
  • 开始时间 开始时间
T

tt123tt

Unregistered / Unconfirmed
GUEST, unregistred user!
var
aa,bb,cc:float;
begin
aa:='26';
bb:='25.6';
cc:=floattostr(strtoflaot(aa)-strtoflaot(bb));
end;
cc得到的结果是0.3300000000000001.
问题:
1) cc为什么得不到0.4?
2) cc怎样改才能得到正确值。
 
procedure TForm1.Button1Click(Sender: TObject);
var
aa,bb,cc:string;
begin
aa:='26';
bb:='25.6';
cc:=floattostr(strtofloat(aa)-strtofloat(bb));
ShowMessage(cc);
end;
我怎么这样就得到了0.4??????!!!
 
老兄
!你的变量声明有问题吧!怎么看不懂呢?
 
最顶层的代码那里编译的过去啊?用double吧
 
浮点数的运用特别要小心,因为你再操作浮点数时,你给出的数可能是4位有效数字,
但在机器中却是该类型数据的统一长度,如4.0,其实是4.0xxxxxxx……,有许多不可见
部分。当你进行计算时,有时结果是不可知的(相对准确);我曾经用浮点数运算后进行大
小比较,但怎么也不对,后来想办法转成整形的才通过。你可能遇到的也是此类问题。
你可以人为的控制数据精度,如截取小数点后5位。delphi中有这样的函数(dataformat)
 
var
aa,bb,cc:float;
-----
^<<<<< string
begin
aa:='26';
bb:='25.6';
cc:=floattostr(strtoflaot(aa)-strtoflaot(bb));
----- -----
^<<<<<<<<<<<<<<^<<<<<<< float
 
你的变量声明有问题,把 aa,bb,cc改称字符型String,就行了!
 
变量声明为字符型String可以的,
不然
var
aa,bb,cc:float;
begin
aa:=26;
bb:=25.6;
cc:=aa-bb;
showmessage(Floattostr(cc));
end;
问题:

哎,来迟了。
 
问题解决了
cc:=floattostr(strtoflaot(aa)-strtoflaot(bb));
后直接显示就没有问题,要是把cc附给real类型的娈量后再来显示就会出现小数点后很多数字。
 
formatfloat('0.0,a-b);
 
我就是不明白为什么中间经过一次real类型后就显示的不一样呢?
 
用currency型就可以了
 
多人接受答案了。
 
后退
顶部