var b17,b18,b19,b20,b21:double;
begin
b17:=strtofloat(DBEditEh29.Text);
b18:=strtofloat(DBEditEh30.Text);
b19:=strtofloat(DBEditEh31.Text);
b20:=strtofloat(DBEditEh32.Text);
b21:=strtofloat(DBEditEh33.Text);
if b17 < (b18+b19+b20+b21) then showmessage('数据不对?');
end;
我的核心程序就这几行。
但是到执行的时候,整数可以,带小数的就不对了。
比如输入 100.85 10.05 40.2 40.2 10.4
100.85=10.05+40.2+40.2+10.4就应该是恒等式,不会有问题啊。
但是老是弹出对话筐,说数据不对。郁闷。
那位兄弟帮我看看,是什么问题呢?
begin
b17:=strtofloat(DBEditEh29.Text);
b18:=strtofloat(DBEditEh30.Text);
b19:=strtofloat(DBEditEh31.Text);
b20:=strtofloat(DBEditEh32.Text);
b21:=strtofloat(DBEditEh33.Text);
if b17 < (b18+b19+b20+b21) then showmessage('数据不对?');
end;
我的核心程序就这几行。
但是到执行的时候,整数可以,带小数的就不对了。
比如输入 100.85 10.05 40.2 40.2 10.4
100.85=10.05+40.2+40.2+10.4就应该是恒等式,不会有问题啊。
但是老是弹出对话筐,说数据不对。郁闷。
那位兄弟帮我看看,是什么问题呢?
解决方案 »
- fastreport打印的内容挺多,一页放不下。
- 怎样能做到点击TreeView前面的+号后,怎样自动选择该节点?
- 自己做的编辑框控件,用Unicode处理文字,为什么当输入文字时在英文系统下显示的乱码
- 新手问题,如何自动添加总价...
- RLINK32: Too many resources to handle.
- 如何制作这样的menu控件。
- 如何察看生成的SQL语句
- DBGRID中的问题,帮帮忙解决一下
- 如何在OleContainer中控制EXCEL?
- 请问如何获得TMemo上的可见行数
- 远程教育项目招聘程序员
- Image组件能显示一个指定地址gif吗?比如:http://expert.csdn.net/images/csdn.gif
const
nEQUAL = 1E-6;
var
dblTemp: Double;
begin
dblTemp := (10.06 + 40.2 + 40.2 + 10.4);
if dblTemp - 100.85 > nEQUAL then
ShowMessage('Please enter again!! ');
end;
swayi21(微斯人)也可以。
但是,我还不明白comp是什么类型哦,pascal的类型好象没见过这类型哦。
and compare float&double data using if(fabs(a-b)<1e-8)
< and > has the same question.
而你定义的 b17,b18,b19,b20,b21变量是double类型,
Extended在系统中占用10字节,而Double只占用8字节。
当你将Extende数据类型的值赋给Double型变量时,系统会强制类型转换,
转换过程中,将产生误差。
所以你只要将b17,b18,b19,b20,b21定义为Extended类型即可。
是数据精度问题,在d6中我将数据类型改为currency即可,其他数据类型不行!
我还用过别的法子,当然要知道需要精确到小数点后几位了,然后把这些值乘以10的n次方
然后再转化为整数进行比较,这样就很方便了。
var b17,b18,b19,b20,b21:double;
begin
b17:=strtofloat(DBEditEh29.Text);
b18:=strtofloat(DBEditEh30.Text);
b19:=strtofloat(DBEditEh31.Text);
b20:=strtofloat(DBEditEh32.Text);
b21:=strtofloat(DBEditEh33.Text);
if Trunc(b17*100)<Trunc((b18+b19+b20+b21)*100) then showmessage('数据不对?');
end;
但在机器中却是该类型数据的统一长度,如4.0,其实是4.0xxxxxxx……,有许多不可见
部分。当你进行计算时,有时结果是不可知的(相对准确);我曾经用浮点数运算后进行大
小比较,但怎么也不对,后来想办法转成整形的才通过。你可能遇到的也是此类问题。
你可以人为的控制数据精度,如截取小数点后5位。delphi中有这样的函数(dataformat)
procedure TForm1.Button1Click(Sender: TObject);
var
aa,bb:double;
cc:String;
begin
aa:=26;
bb:=25.6;
cc:=floattostr(aa-bb);
showmessage(cc);
end;
它的结果就不是0.4而是3.9999999999999。
"="号是绝对不能用的,应该用两个值相减的绝对值小于某个值来比较.