sos---用sql语句查询在一段日期内的sum,并与去年同期做差比较,其结果的问题 (100分)

  • 主题发起人 主题发起人 taim
  • 开始时间 开始时间
T

taim

Unregistered / Unconfirmed
GUEST, unregistred user!
我用query查询一段时间内的sum,并把结果与去年同期做差,(其语句select zhanname,
sum(db2001.dulou)-sum(db2000.dulou) from db2001.db,db2000.db
where db2001.name=db2000.name and db2001.riqi=db2000.riqi and
db2001.riqi>=(变量) and db2001.riqi<=(变量) group by name)
结果用qrdbtext在报表之上打印.我的数据库中的已知数小数位最多是一位,
其结果也应该为一位才对。但是在报表上却出现了789.00000001,456.599999999这样的
结果(有5、6个)。不知其原因,怎样解决。(我的结果不存入数据库,只是打印。)
恳请大虾们帮忙。谢谢。
 
浮点值的误差一直是个老问题,你得将字段的currency开关打开或者在驱动中将
EnableBCD的开关打开,还有一个办法是我以前有拓创论坛上贴过的,不过,现在
可实在是不记得了。
 
我建议你写个TQRLable的OnPrint事件
将数值强制转换成double型,或用format()格式化.
 
应该是你的Query查询出来的结果就是包含多位小数的吧!
我这儿也碰到过这样的问题。
我后来用了先乘取整再除来实现.
你可以试试下面的语句:
select zhanname,
Round(10*(sum(db2001.dulou)-sum(db2000.dulou)))/10 from db2001.db,db2000.db
where db2001.name=db2000.name and db2001.riqi=db2000.riqi and
db2001.riqi>=(变量) and db2001.riqi<=(变量) group by name)
应该可以通过。除非你的数据库不支持这些函数。
 
若你的数据库支持像上面冷叶风所说的函数,就可以用这种方法来解决小数点的问题,
若你的数据库不支持,那么你就用jssy的方法,在打印的OnPrint事件中来改小数点.
 
当为3.4时,系统会默认为3.999999
这类问题与你的BDE配置有关,最好修改BDE的设置。
 
只要格式打印的就可以了,不要去强求,你不就是输出么,管他在数据库是什么
 
用CONVER(NUMERIC(10, 2), FloatDate)转化一下就OK了
 
后退
顶部