热情软件屋

 

浮点数加法出错


编号:QA001496
建立日期: 1999年8月11日 最后修改日期:1999年8月11日
所属类别:

zhanghy:
    操作系统WIN97和WIN98,编程语言为Powerbulid6.5
    我用Powerbulid6.5建立一个表,表内建A1~A11共11个字段,各字段类型均为numeric,12,2,用此表建立数据窗口,在此数据窗口为A11定义了有校性录入规则定义为numeric(gtetext())=a1+a2+a3+...+a10
    然后建立一窗口并将上述数据窗口置于其中,在窗口的itemerror事件中定义了错误信息,问题出在当A1~A10中的小数位大于0.70时竟会引起加法出错,例如:A1=0.7,A2=0.71,A3=0.72,A4=0.73...A10=0.79, A11=7.45就会出现错误信息,而将A1=0.71,A2=0.72,A3=0.73...A9=0.79,A10=0.70,A11=7.45又正确。 类似上述状况很多,自己总查不出原因,请专家指点。

回答:

    th建议:
    估计是PB浮点数内部表示的问题!比如在DW中0.7用Getitemnumber取出到变量ld_var(dec类型)的时候,用MessageBox("提示信息",string(ld_var))显示变量ld_var的值时,
    发现ld_var是0.699999999999999999...,可以把有效性录入规则定义为:
    round(numeric(gtetext()),n)=round(a1,n)+round(a2,n)+...+round(a10,n)
    其中:n为需要精确的最大小数位数,试一试,可能成功。
    马静建议:
    你试一试把A1-A10的小数位数变为3位。

此问题由th、马静回答。

 
把这个问题推荐给朋友
   
   
您的意见类别
您的名字
您的电子邮件
您的建议(请尽可能详细)
 
 

版权所有 1997-2008 热情软件屋
如果您有任何建议和意见, 请给我发个电子邮件 askpro@china-askpro.com
Web Designed by ZebraStudio