两个相同的double型数据相减不等于0 ???(50分)

  • 主题发起人 主题发起人 fbi9999
  • 开始时间 开始时间
F

fbi9999

Unregistered / Unconfirmed
GUEST, unregistred user!
两个相同的double数相减不等于0 ?? 如何才能让它等于0 ?
 
http://www.delphibbs.com/delphibbs/dispq.asp?lid=3477108
刚才有人问过了。
 
没有问题啊,我试过了(在delphi7),没有问题啊。
 
var
a,b:double;
begin
b:=134545.62;
a:=b-b;
end;

该如何令a等于0 ????
 
你的 d1:= strtofloat(edit1.Text);
d2:= strtofloat(edit2.Text);
里,strtofloat()后会随机有小数位数,这就是为何最后的结果会发生变化的原因。
 
to carrie4002:
?????????
 
if b-b<0.000001 then a:=0;
 
to lxw5214:
有没有更好的方法?如果b-b是 0.01 那 if b-b<0.000001 then a:=0 就失效了.
 
一个办法。你把这个值×1000,然后取整数,然后比较
这样精度降低。但不会有随机小数问题
 
实在不行,就 FloatToStr(b),来比较字符串是否相同,我以前就是这么作的 :)
 
浮点运算是有误差的,所以一般做法是取其绝对值与一个足够小的数比较:
if abs(b-b) < 0.0000001 then a := 0;
 
判断double类型的数值是否相等,不要用等号,这是常识
 
来自:lxw5214, 时间:2006-6-27 17:29:25, ID:3483040
if b-b<0.000001 then a:=0;


如上所说,精度问题
 
不论是什么语言编程,两个浮点数相减为0或完全相等这样判断是不可取的,应该是两数相减小于某个极小的小数,比如0.000001就可以认为它相等。
因为电脑里的寄存器是有一定精度的,不可能记录无限多位的小数。
 
多人接受答案了。
 
后退
顶部