关于DOUBLE类型计算的问题,真是郁闷,大家来帮忙看看。 ( 积分: 100 )

  • 主题发起人 主题发起人 ybbqy
  • 开始时间 开始时间
Y

ybbqy

Unregistered / Unconfirmed
GUEST, unregistred user!
var
f:double;
begin
f:=10100.1;
showmessage(floattostr(f-trunc(f)));
end;
为我预期的结果应该是0.1,而实际是0.100000000000364,为什么啊?
 
浮点型有误差的,如果数度要求小数点后不超过4位,可以用currency类型
 
这和浮点类型的存储机制有关,比如0.1,可能显示为 0.09999999
可以这样显示:showmessage(formatfloat('0.00',f)); 显示两位小数(根据第一个参数小数点后面零的个数)
formatfloat还有更多功能,比如加入千位分号 formatfloat('#,000.00',f)
具体可查看delphi的帮助文件
 
多句嘴:
因此,在程序中比较两个实数是否相等就不能用 “if a=b then”而要用“if abs(a-b)<1e-5 then ”
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
后退
顶部