F fbi9999 Unregistered / Unconfirmed GUEST, unregistred user! 2006-06-27 #1 两个相同的double数相减不等于0 ?? 如何才能让它等于0 ?
蓝 蓝叶菱 Unregistered / Unconfirmed GUEST, unregistred user! 2006-06-27 #2 http://www.delphibbs.com/delphibbs/dispq.asp?lid=3477108 刚才有人问过了。
F free_dragon Unregistered / Unconfirmed GUEST, unregistred user! 2006-06-27 #3 没有问题啊,我试过了(在delphi7),没有问题啊。
F fbi9999 Unregistered / Unconfirmed GUEST, unregistred user! 2006-06-27 #4 var a,b:double; begin b:=134545.62; a:=b-b; end; 该如何令a等于0 ????
C carrie4002 Unregistered / Unconfirmed GUEST, unregistred user! 2006-06-27 #5 你的 d1:= strtofloat(edit1.Text); d2:= strtofloat(edit2.Text); 里,strtofloat()后会随机有小数位数,这就是为何最后的结果会发生变化的原因。
你的 d1:= strtofloat(edit1.Text); d2:= strtofloat(edit2.Text); 里,strtofloat()后会随机有小数位数,这就是为何最后的结果会发生变化的原因。
L lxw5214 Unregistered / Unconfirmed GUEST, unregistred user! 2006-06-27 #7 if b-b<0.000001 then a:=0;
F fbi9999 Unregistered / Unconfirmed GUEST, unregistred user! 2006-06-27 #8 to lxw5214: 有没有更好的方法?如果b-b是 0.01 那 if b-b<0.000001 then a:=0 就失效了.
X xuegaoyili Unregistered / Unconfirmed GUEST, unregistred user! 2006-06-27 #9 一个办法。你把这个值×1000,然后取整数,然后比较 这样精度降低。但不会有随机小数问题
S SeekMyself Unregistered / Unconfirmed GUEST, unregistred user! 2006-06-27 #10 实在不行,就 FloatToStr(b),来比较字符串是否相同,我以前就是这么作的 :)
D dreamisx Unregistered / Unconfirmed GUEST, unregistred user! 2006-06-27 #11 浮点运算是有误差的,所以一般做法是取其绝对值与一个足够小的数比较: if abs(b-b) < 0.0000001 then a := 0;
H huasoft_hth Unregistered / Unconfirmed GUEST, unregistred user! 2006-06-27 #12 判断double类型的数值是否相等,不要用等号,这是常识
W wp231957 Unregistered / Unconfirmed GUEST, unregistred user! 2006-06-27 #13 来自:lxw5214, 时间:2006-6-27 17:29:25, ID:3483040 if b-b<0.000001 then a:=0; 如上所说,精度问题
W weiliu Unregistered / Unconfirmed GUEST, unregistred user! 2006-06-27 #14 不论是什么语言编程,两个浮点数相减为0或完全相等这样判断是不可取的,应该是两数相减小于某个极小的小数,比如0.000001就可以认为它相等。 因为电脑里的寄存器是有一定精度的,不可能记录无限多位的小数。
不论是什么语言编程,两个浮点数相减为0或完全相等这样判断是不可取的,应该是两数相减小于某个极小的小数,比如0.000001就可以认为它相等。 因为电脑里的寄存器是有一定精度的,不可能记录无限多位的小数。